"Halo, Amigo! Saiki aku bakal pitutur marang kowe bab rong antarmuka: InputStream lan OutputStream . Padha diumumake minangka kelas abstrak, nanging yen digali luwih jero sampeyan bisa ndeleng sing padha ateges antarmuka . Meh kabeh cara sing abstrak, kajaba kanggo sawetara cara sing ora pati penting. Padha banget kaya " pengawal " sing kita anggep sadurunge.

Iki minangka antarmuka sing menarik banget. Saiki, aku bakal sengaja nelpon antarmuka , supaya sampeyan ngerti kenapa kita butuh. Banjur kita bakal pirembagan babagan kenapa dheweke pancen kelas abstrak.

"Oke. Dadi apa antarmuka iki?"

"Aku bakal ngomong tanpa ado maneh."

Jawa nduweni bab sing menarik iki diarani " stream ". A stream minangka entitas sing prasaja banget. Lan kesederhanaan minangka kunci kanggo cara ijol-ijolan data sing kuat banget. Ana rong jinis stream: stream kanggo maca lan stream kanggo nulis .

Kaya sing wis sampeyan duga, sampeyan bisa nulis data menyang stream kanggo nulis . Wis cara nulis kanggo iki. Sampeyan bisa maca data saka stream kanggo maca . Wis maca () cara iki.

InputStream  minangka antarmuka kanggo stream sing ndhukung maca. Iku nemtokake kemampuan ing ngisor iki: «byte bisa maca saka kula».

Kajaba iku, OutputStream , OutputStream minangka antarmuka kanggo stream sing ndhukung nulis. Iku nemtokake kemampuan ing ngisor iki: «byte bisa ditulis kanggo kula».

"Lha iku?"

"Cukup akeh. Nanging kabeh titik iku Jawa akeh kelas sing bisa digunakake karo InputStream lan OutputStream . Contone, sampeyan pengin maca file saka disk lan nampilake isi ing layar. Ora ana sing luwih gampang."

Kanggo maca data saka file ing disk, kita duwe kelas FileInputStream khusus , sing ngetrapake antarmuka InputStream . Apa sampeyan pengin nulis data iki menyang file liyane? Kanggo iki, kita duwe kelas FileOutputStream , sing ngetrapake antarmuka OutputStream . Kode ing ngisor iki nuduhake apa sing kudu sampeyan lakoni kanggo nyalin data saka file siji menyang file liyane.

Kode
public static void main(String[] args) throws IOException
{
 InputStream inStream = new FileInputStream("c:/source.txt");
 OutputStream outStream = new FileOutputStream("c:/result.txt");

 while (inStream.available() > 0)
 {
  int data = inStream.read(); //read one byte from the input stream
  outStream.write(data); //write that byte to the other stream.
 }

 inStream.close(); //close the streams
 outStream.close();
}

Bayangake yen kita wis nulis kelas lan nambah  kabisan InputStream  lan  OutputStream .

Yen kita ngetrapake antarmuka kasebut kanthi bener, mula conto kelas kita saiki bisa disimpen utawa diwaca saka file. Cukup kanthi maca isine nggunakake metode maca . Utawa bisa dimuat saka file kanthi nggawe obyek lan nggunakake metode nulis kanggo nulis isi file.

"Mungkin conto?"

"Inggih."

Kode Katrangan
class MyClass
{
private ArrayList<Integer> list;
}
Kanggo gamblang, mbayangno kelas kita ngemot siji obyek, ArrayList sing ngemot Integer.

Saiki kita bakal nambah cara maca lan nulis

Kode Katrangan
class MyClass
{
private ArrayList<Integer> list;
public void write(int data)
{
list.add(data);
}
public int read()
{
int first = list.get(0);
list.remove(0);
return first;
}

public int available()
{
return list.size();
}
}
Saiki kelas kita ngleksanakake metode maca , sing ndadekake bisa maca kabeh isi dhaptar kanthi urut .

Lan cara nulis , sing ngidini sampeyan nulis nilai menyang dhaptar kita.

Mesthi, iki dudu implementasi saka antarmuka InputStream lan OutputStream, nanging meh padha.

"Iya, aku ngerti. Dadi kepiye carane sampeyan nyimpen isi obyek kasebut menyang file?"

"Aku menehi conto:"

Tulis obyek MyClass menyang file
public static void main(String[] args)
{
 MyClass myObject = new MyClass();
 OutputStream outStream = new FileOutputStream ("c:/my-object-data.txt");

 while (myObject.available() > 0)
 {
  int data = myObject.read(); //read one int from the input stream
  outStream.write(data); //write that int to the other stream.
 }

 outStream.close();
}
Maca obyek MyClass saka file
public static void main(String[] args)
{
 InputStream inStream = new FileInputStream("c:/my-object-data.txt");
 MyClass myObject = new MyClass();

 while (inStream.available() > 0)
 {
  int data = inStream.read(); //read one int from the input stream
  myObject.write(data); //write that int to the other stream.
 }

 inStream.close(); //close the streams
}

"Moly Suci! Pancen padha karo nggarap InputStream/OutputStream. Aliran sing manis!"

"Lan banjur sawetara!"