Pengenalan Input/Output (I/O)
Pada Java, input/output pada file dan jaringan dilakukan berdasarkan aliran (stream), di mana semua objek dapat melakukan perintah I/O yang sama. Standar output (System.out) dan standar input (System.in) adalah contoh aliran.
Operasi pada Aliran (Stream)
·
- Kelas dasar I/O Reader, Writer, InputStream
dan OutputStream hanya menyediakan operasi I/O sangat dasar. Misalnya, kelas
InputStream memiliki metode instansi
·
public
int read()
throws IOException
·
untuk membaca satu byte data dari
aliran input. Jika sampai pada akhir dari aliran input , metode read() akan mengembalikan nilai -1. Jika ada kesalahan yang
terjadi pada saat pengambilan input, maka pengecualian IOException akan dilemparkan. Karena IOException
adalah kelas pengecualian yang harus ditangani, artinya kita harus menggunakan
metode read() di dalam
penyataan try atau mengeset subrutin untuk throws IOException. (Lihat kembali pembahasan tentang pengecualian di bab sebelumnya)
·
- Kelas InputStream
juga memiliki metode untuk membaca beberapa byte data dalam satu langkah ke
dalam array byte. Akan tetapi InputStream tidak memiliki metode untuk
membaca jenis data lain, seperti int
atau double dari aliran. Ini bukan masalah karena dalam prakteknya kita
tidak akan menggunakan objek bertipe InputStream
secara langsung. Yang akan kita gunakan adalah kelas turunan dari InputStream yang memiliki beberapa metode input yang lebih beragam
daripada InputStream itu sendiri.
·
Begitu juga dengan kelas OutputStream memiliki metode output primitif untuk menulis satu byte
data ke aliran output, yaitu metode
·
public
void write(int b) throws IOException
·
Tapi, kita hampir pasti akan
menggunakan kelas turunannya yang mampu menangani operasi yang lebih kompleks.
·
- Kelas Reader
dan Writer memiliki operasi dasar yang hampir sama, yaitu read
dan write, akan tetapi kelas ini berorientasi karakter (karena
digunakan untuk membaca dan menulis data yang bisa dibaca manusia). Artinya
operasi baca tulis akan mengambil dan menulis nilai char bukan byte. Dalam prakteknya kita akan menggunakan kelas
turunan dari kelas-kelas dasar ini.
·
Salah satu hal menarik dari paket
I/O pada Java adalah kemungkinan untuk menambah kompleksitas suatu aliran
dengan membungkus aliran tersebut dalam objek aliran lain. Objek pembungkus ini
juga berupa aliran, sehingga kita juga bisa melakukan baca tulis dari objek
yang sama dengan tambahan kemampuan dalam objek pembungkusnya.
·
Misalnya, PrintWriter adalah kelas turunan dari Writer
yang memiliki metode tambahan untuk menulis tipe data Java dalam karakter yang
bisa dibaca manusial. Jika kita memiliki objek bertipe Writer atau turunannya, dan kita ingin menggunakan metode pada PrintWriter untuk menulis data, maka kita bisa membungkus objek Writer dalam objek PrintWriter.
·
Contoh jika baskomKarakter bertipe Writer, maka kita bisa membuat
·
PrintWriter
printableBaskomKarakter = new PrintWriter(baskomKarakter);
Ketika kita menulis data ke printableBaskomKarakter dengan menggunakan metode pada PrintWriter yang lebih canggih, maka data tersebut akan
ditempatkan di tempat yang sama dengan apabila kita menulis langsung pada baskomKarakter.
Artinya kita hanya perlu membuat antar muka yang lebih baik untuk aliran output
yang sama. Atau dengan kata lain misalnya kita bisa menggunakan PrintWriter untuk menulis file atau mengirim data pada jaringan.
·
Untuk lengkapnya, metode pada kelas PrintWriter memiliki metode sebagai berikut :
·
//
Metode untuk menulis data dalam
·
//
bentuk yang bisa dibaca manusia
·
public
void print(String s)
·
public
void print(char c)
·
public
void print(int i)
·
public
void print(long l)
·
public
void print(float f)
·
public
void print(double d)
·
public
void print(boolean b)
·
·
//
Menulis baris baru ke aliran
·
public
void println()
·
·
//
Metode ini sama dengan di atas
·
// akan
tetapi keluarannya selalu
·
//
ditambah dengan baris baru
·
public
void println(String s)
·
public
void println(char c)
·
public
void println(int i)
·
public
void println(long l)
·
public
void println(float f)
·
public
void println(double d
public void println(boolean b)