"Kumusta, Amigo! Makikilala natin ngayon ang mga input/output stream . Pinili namin ang paksang ito ilang araw na ang nakakaraan, ngunit ngayon ay i-explore namin ito nang lubusan. Ang mga input/output stream ay nahahati sa 4 na kategorya:"

1) Ang mga stream ay hinati ayon sa kanilang direksyon: input stream at output stream

2) Ang mga stream ay hinati ayon sa kanilang uri ng data: ang mga gumagana sa mga byte at ang mga gumagana sa mga character .

Narito ang mga dibisyong ito ay kinakatawan sa isang talahanayan:

Input stream Output stream
Gumagana sa mga byte InputStream OutputStream
Gumagana sa mga character Reader Manunulat

Kung ipinapatupad ng isang bagay ang interface ng InputStream , sinusuportahan nito ang kakayahang magbasa ng mga byte mula dito nang sunud-sunod.

Kung ipinapatupad ng isang bagay ang interface ng OutputStream , sinusuportahan nito ang kakayahang sunud-sunod na magsulat ng mga byte dito.

Kung ipinatupad ng isang bagay ang interface ng Reader , sinusuportahan nito ang kakayahang magbasa ng mga character (mga character) nang sunud-sunod mula dito.

Kung ang isang bagay ay nagpapatupad ng interface ng Writer , pagkatapos ay sinusuportahan nito ang kakayahang sunud-sunod na magsulat ng mga character (mga character) dito.

Input/Output stream - 1

Ang isang output stream ay tulad ng isang printer. Maaari kaming mag-output ng mga dokumento sa printer. Maaari kaming mag-output ng data sa isang output stream.

Para sa bahagi nito, ang isang input stream ay maihahambing sa isang scanner, o marahil isang saksakan ng kuryente. Sa pamamagitan ng scanner, maaari tayong magdala ng mga dokumento sa ating computer. O maaari tayong magsaksak sa isang saksakan ng kuryente at makatanggap ng kuryente mula dito. Makakatanggap kami ng data mula sa isang input stream.

"Saan ginagamit ang mga ito?"

"Ang mga klase na ito ay ginagamit saanman sa Java. Ang aming pamilyar na kaibigang System.in ay isang static na variable ng InputStream na pinangalanan sa klase ng System ."

"Seryoso?! So all this time gumagamit ako ng InputStream at hindi ko namalayan. Stream din ba ang System.out?"

"Oo, ang System.out ay isang static na PrintStream (isang descendant ng OutputStream ) na variable sa klase ng System."

"Ibig mong sabihin sa akin na palagi akong gumagamit ng mga stream at hindi ko alam?"

"Oo, at iyon lang ang nagsasabi sa amin kung gaano kaginhawa ang mga stream na ito. Kumuha ka lang ng isa at gamitin ito."

"Ngunit hindi mo masasabi iyon tungkol sa System.in. Palagi kaming kailangang magdagdag ng BufferedReader o InputStreamReader dito."

"Totoo naman. Pero may mga dahilan din para doon."

Mayroong maraming mga uri ng data, at maraming mga paraan upang gumana sa kanila. Kaya't ang bilang ng mga karaniwang klase ng I/O ay mabilis na lumago, kahit na ginawa nila ang lahat sa halos parehong paraan. Upang maiwasan ang pagiging kumplikado, ginamit ng mga developer ng Java ang prinsipyo ng abstraction at hinati ang mga klase sa maraming maliliit na bahagi.

Ngunit maaari mong ikonekta ang mga bahaging ito sa isang magkakaugnay na paraan at makakuha ng napaka kumplikadong pag-andar, kung kailangan mo ito. Tingnan ang halimbawang ito:

Mag-output ng string sa console
System.out.println("Hello");
Itabi ang console output stream sa isang hiwalay na variable.
Mag-output ng string sa stream.
PrintStream console = System.out;
console.println("Hello");
Gumawa ng dynamic (lumalawak) byte array sa memorya.
Ikonekta ito sa isang bagong output stream (PrintStream object).
Mag-output ng string sa stream.
ByteArrayOutputStream stream = new ByteArrayOutputStream();
PrintStream console = new PrintStream(stream);
console.println("Hello");

"Sa totoo lang, ito ay tulad ng isang set ng Lego. Tanging hindi malinaw sa akin kung ano ang ginagawa ng alinman sa code na ito."

"Huwag kang mag-alala tungkol doon sa ngayon. Lahat ng bagay sa sarili nitong takdang panahon."

Ito ang gusto kong tandaan mo: Kung ang isang klase ay nagpapatupad ng interface ng OutputStream, maaari kang sumulat ng mga byte dito. Halos eksaktong kagaya ng paglabas mo ng data sa console. Ang ginagawa nito ay ang negosyo nito. Sa aming "Lego kit", wala kaming pakialam sa layunin ng bawat indibidwal na bahagi. Pinapahalagahan namin ang katotohanan na ang malaking seleksyon ng mga bahagi ay nagbibigay-daan sa amin na bumuo ng mga cool na bagay.

"Okay. Saka saan tayo magsisimula?"