"Kumusta, Amigo! Ngayon ay muli nating pag-uusapan kung paano gumagana ang InputStream at OutputStream . Ang paunang paliwanag ay talagang medyo simple. Hindi ito mga interface. Ang mga ito ay mga abstract na klase, at mayroon pa silang ilang ipinatupad na pamamaraan. Tingnan natin ang mga pamamaraan na mayroon sila:"

Mga pamamaraan ng InputStream Ano ang ginagawa ng pamamaraan
int read(byte[] buff);
Ang pamamaraang ito ay agad na nagbabasa ng isang bloke ng mga byte sa buffer ( byte array ), hanggang sa mapuno ang buffer o hanggang sa ang pinagmulan ay wala nang mga byte na mababasa.
Ibinabalik ng pamamaraan ang bilang ng mga byte na aktwal na nabasa (na maaaring mas mababa kaysa sa haba ng array)
int read();
Binabasa ng pamamaraang ito ang isang byte at ibinabalik ito. Ang resulta ay pinalawak sa isang int para sa hitsura. Kung wala nang mga byte na babasahin, ang pamamaraan ay nagbabalik -1.
int available();
Ibinabalik ng pamamaraang ito ang bilang ng mga hindi pa nababasa (available) byte.
void close();
Ang pamamaraang ito ay "sinasara" ang stream. Tawagan mo ito kapag tapos ka nang magtrabaho sa stream.
Isinasagawa ng object ang mga operasyong housekeeping na kailangan para isara ang file, atbp.
Sa puntong ito, hindi ka na makakapagbasa ng anumang data mula sa stream.

"Kaya mababasa natin hindi lamang ang mga solong byte, kundi pati na rin ang buong mga bloke?"

"Eksakto."

"Maaari din ba tayong magsulat ng buong bloke?"

"Oo, tingnan mo:"

Mga pamamaraan ng OutputStream Ano ang ginagawa ng pamamaraan
void write(int c);
Ang pamamaraang ito ay nagsusulat ng isang byte. Ang uri ng int ay pinaliit sa isang byte. Ang sobrang bahagi ay itinatapon lamang.
void write(byte[] buff);
Ang pamamaraang ito ay nagsusulat ng isang bloke ng mga byte.
void write(byte[] buff, int from, int count);
Ang pamamaraang ito ay nagsusulat ng bahagi ng isang bloke ng mga byte. Ito ay ginagamit sa mga kaso kapag ang byte array ay maaaring hindi ganap na napunan.
void flush();
Kung ang stream ay panloob na nag-iimbak ng anumang data na hindi pa naisusulat, pinipilit ng pamamaraang ito na maisulat ito.
void close();
Ang pamamaraang ito ay "sinasara" ang stream. Tawagan mo ito kapag tapos ka nang magtrabaho sa stream.
Isinasagawa ng object ang mga operasyong housekeeping na kailangan upang isara ang file, atbp. Hindi ka na makakasulat ng data sa stream, at awtomatikong tinatawag ang flush.

"Ano ang magiging hitsura ng code sa pagkopya ng file kung babasahin natin ang buong mga bloke nang sabay-sabay sa halip na mga solong byte?"

"Hmm. Parang ganito:"

Kopyahin ang isang file sa disk
public static void main(String[] args) throws Exception
{
 //Create a stream to read bytes from a file
 FileInputStream inputStream = new FileInputStream("c:/data.txt");
 //Create a stream to write bytes to a file
 FileOutputStream outputStream = new FileOutputStream("c:/result.txt");

  byte[] buffer = new byte[1000];
 while (inputStream.available() > 0) //as long as there are unread bytes
 {
  //Read the next block of bytes into buffer, and store the actual number of bytes read in count.
  int count = inputStream.read(buffer);
  outputStream.write(buffer, 0, count); //Write a block (part of a block) to the second stream
 }

 inputStream.close(); //Close both streams. We don't need them any more.
 outputStream.close();
}

"Naiintindihan ko ang lahat tungkol sa buffer, ngunit ano ang variable na bilang na ito?"

"Kapag nabasa namin ang pinakabagong bloke ng data mula sa isang file, maaari kaming makakuha, sabihin nating, 328 byte sa halip na 1000. Kaya kapag isinulat namin ang data, kailangan naming ipahiwatig na hindi namin isinusulat ang buong bloke-tanging ang unang 328 bytes."

Kapag nabasa natin ang huling block, ibabalik ng read method ang bilang ng mga byte na aktwal na nabasa. 1000 sa tuwing magbabasa tayo ng isang block, maliban sa huling block, kapag nakakuha tayo ng 328.

Kaya kapag sumulat kami ng isang bloke, ipinapahiwatig namin na hindi lahat ng mga byte sa buffer ay dapat isulat, 328 lamang (ibig sabihin, ang halaga na nakaimbak sa variable ng bilang).

"Ngayon malinaw na ang lahat. Salamat, Ellie."