Posted by : smkn1blitar
Kamis, 08 Januari 2015
Pada program-program yang
membutuhkan data-data eksternal, maka diperlukan suatu proses input
dan ouput (I/O), dimana pada Java dukungan proses I/O ini sudah disediakan
dalam paket java.io. Di dalam paket tersebut tersimpan banyak kelas dan
interface siap pakai yang akan memudahkan programmer dalam pengambilan dan
penyimpanan informasi dari/ke media lain (misalnya file).
Program
Java melakukan proses I/O melalui stream, yaitu sebuah abstraksi yang dapat
memberikan atau mendapatkan informasi. Stream dapat dihubungkan dengan
peralatan fisik yang terdapat dalam sistem I/O Java, seperti keyboard, file,
layar console, soket jaringan, dan lainnya. Walaupun dihubungkan dengan
peralatan fisik yang berbeda, cara kerja stream selalu sama, sehingga kode
program yang ditulis juga sama untuk masing-masing peralatan fisik.
Misalnya, untuk melakukan penulisan sebuah teks ke layar console maupun ke
dalam file, maka dapat digunakan kelas dan method yang sama.
Stream
ada dua jenis, yaitu stream byte dan stream karakter. Stream byte digunakan
untuk memberikan atau menyimpan informasi data dalam bentuk byte, misalnya
untuk menulis dan membaca file biner. Sedangkan stream karakter pada proses I/O
yang melibatkan data-data berbentuk karakter, misalnya proses
baca/tulis ke suatu file teks, dengan menggunakan karakter Unicode.
Pendefinisian
stream dilakukan dengan menggunakan empat kelas abstrak, yaitu InputStream dan OutputStream, sebagai
superclass untuk kelas-kelas dalam kategori stream byte, dan kelas
abstrak Reader dan Writer untuk kategori stream
karakter. Melalui proses pewarisan
(inheritance), semua kelas yang diturunkan dari
InputStream maupun Reader akan memiliki method read(), yang digunakan dalam proses pembacaan data. Adapun untuk
proses penulisan data digunakan method write() dalam semua kelas yang diturunkan dari OutputStream maupunWriter. Daftar beberapa kelas dalam paket java.io yang
termasuk dalam kategori stream byte ditunjukkan pada Tabel 1., sedangkan kelas-kelas dalam
kategori stream karakter ditunjukkan pada Tabel 2.
Tabel 1. Kelas-kelas stream byte
Nama Kelas
|
Keterangan
|
BufferedInputStream
|
Stream input yang telah terbuffer
|
BufferedOutputStream
|
Stream output yang telah terbuffer
|
ByteArrayInputStream
|
Stream input yang membaca dari
array byte
|
ByteArrayOutputStream
|
Stream input yang menulis ke array
byte
|
DataInputStream
|
Stream input yang berisi method-method untuk
|
membaca tipe data standar
|
|
DataOutputStream
|
Stream output yang berisi method-method untuk
|
menuliskan tipe data standar
|
|
FileInputStream
|
Stream input yang membaca dari
sebuah file
|
FileOutputStream
|
Stream output yang menulis ke
sebuah file
|
FilterInputStream
|
Mengimplementasikan InputStream
|
FilterOutputStream
|
Mengimplementasikan OutputStream
|
InputStream
|
Kelas abstrak yang menjelaskan
stream input
|
OutputStream
|
Kelas abstrak yang menjelaskan
stream output
|
PipedInputStream
|
Penyalur input
|
PipedOutputStream
|
Penyalur output
|
PrintStream
|
Stream output yang berisi method println() dan print()
|
Semua
program Java otomatis akan mengimpor paket java.lang yang mendefinisikan sebuah kelas bernama System yang berkaitan
dengan lingkungan runtime. Kelas System juga mendefinisikan tiga variabel stream, yaitu in, out, dan err, dimana data-datanya dideklarasikan
sebagai public atau static. Dengan demikianvariabel-variabel tersebut
dapat digunakan tanpa harus membentuk objek dari kelas
System terlebih dahulu. System.out adalah stream output standar dengan default layar console. System.in adalah
objek dari tipe PrintStream, defaultnya berupa keyboard dan mengacu pada stream input
standar. Sedangkan pada stream error standar terdapatSystem.err yang
secara default berupa layar console. System.out
dan System.err adalah objek dari tipe PrintStream dan mempunyai cara kerja yang
sama, yaitu mengeluarkan pesan kesalahan ke layar console.
Tabel 2. Kelas-kelas stream
karakter
|
||
Nama Kelas
|
Keterangan
|
|
BufferedReader
|
Stream karekter input yang telah
terbuffer
|
|
BufferedWriter
|
Stream karakter output yang telah
terbuffer
|
|
CharArrayReader
|
Stream input yang membaca dari
array karakter
|
|
CharArrayWriter
|
Stream input yang menulis ke array
karakter
|
|
FileReader
|
Stream input yang membaca dari
file
|
|
FileWriter
|
Stream output yang menulis ke file
|
|
FilterReader
|
Reader yang terfilter
|
|
FilterWriter
|
Writer yang terfilter
|
|
InputStreamReader
|
Stream input yang menerjemahkan
byte ke karakter
|
|
LineNumberReader
|
Stream input yang menghitung
jumlah baris
|
|
OutputStreamWriter
|
Stream input yang menerjemahkan
karakter ke byte
|
|
PipedReader
|
Penyalur input
|
|
PipedWriter
|
Penyalur output
|
|
PrintWriter
|
Stream output yang berisi method println() dan print()
|
|
Reader
|
Kelas abstrak yang menjelaskan
stream karakter input
|
|
StringReader
|
Stream input yang membaca dari
sebuah string
|
|
StringWriter
|
Stream output yang menulis ke
sebuah string
|
|
Writer
|
Stream output
|
Node Stream
Terdapat tiga tipe dasar node, yaitu:
•File
•Memori (misalnya objek array atau String)
•Pipe (suatu kanal dari satu proses)
Tipe dari node stream dapat dibagi lagi sesuai dengan Tabel
3.
Tabel 3. Tipe Node Stream
Tipe
|
Stream Karakter
|
Stream Byte
|
|||
File
|
FileReader
|
FileInputStream
|
|||
FileWriter
|
FileOutputStream
|
||||
Memory:
|
CharArrayReader
|
ByteArrayInputStream
|
|||
array
|
CharArrayWriter
|
ByteArrayOutputStream
|
|||
Memory:
|
StringReader
|
N/A
|
|||
String
|
StringWriter
|
||||
Pipe
|
PipeReader
|
PipedInputStream
|
|||
PipeWriter
|
PipedOutputStream
|
||||
Praktikum Dasar Programming 2
|
45
|
||||
Melakukan Input
Dalam Java, input console dilakukan melalui pembacaan
terhadap stream
System.in. Untuk mendapatkan karakter-karakter yang
dimasukkan melalui keyboard ke dalam layer console, diperlukan membungkus System.in di
dalam objek
BufferedReader.
Hal ini dilakukan untuk membentuk stream karakter karena
System.in sebenarnya
merupakan stream bute. Adapun bentuk constructor dari
BufferedReader sebagai
berikut,
BufferedReader(Reader inputReader)
inputReader adalah stream yang akan dihubungkan dengan instance atau
objek dari kelas BufferedReader yang dibuat. Karena Reader merupakan kelas abstrak, maka perlu dicari kelas turunannya
yang berupa kelas konkrit. Salah satunya adalah kelas
InputStreamReader, yang dapat mengonversi byte ke karakter. Sedangkan agar
objek dari InputStreamReader dapat dihubungkan dengan System.in, perlu digunakan bentuk constructor seperti berikut,
InputStreamReader(InputStream inputStream)
Dalam hal ini, inputStream dapat
diisi dengan System.in. Sehingga untuk membuat objek BufferedReader yang
dapat terhubung dengan keyboard, perlu digunakan
kode berikut:
BufferedReader br = new BufferedReader (new
InputStreamReader (System.in));
Atau bisa juga ditulis:
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
Pada tahap ini objek br sudah siap
digunakan untuk melakukan proses input, yaitu dengan melakukan pemanggilan
terhadap method read() maupun readline().
Membaca Input Data Karakter
Untuk
membaca input berupa karakter, digunakan method read() yang terdapat
pada kelas BufferedReader, dengan pendeklarasian sebagai berikut:
int read() throws IOException
Membaca Input Data String
Untuk
melakukan input berupa string harus digunakan method readLine(), bukan read(), dengan deklarasi method sebagai
berikut:
String readLine() throws IOException
Proses input data string di dalam Java juga berlaku untuk
karakter spasi.
Membaca Input Data Numerik
Untuk
input berupa data numerik, maka caranya sama dengan melakukan input terhadap
data string. Selanjutnya string hasil input tersebut dikonversi ke tipe numerik
dengan memanggil method parseInt() yang terdapat pada kelas Integer untuk bilangan bulat, atau parseDouble() yang
terdapat pada kelas Double untuk bilangan riil. Parameter yang dilewatkan ke dalam
method tersebut harus bertipe string. Sebaiknya proses konversi berada di dalam
blok try-catch untuk menghindari masukan string yang tidak dapat dikonversi
ke bilangan bulat, misalnya string “abc”.
Menampilkan Output
Untuk
menampilkan output ke layar console, dapat dengan mudah dilakukan melalui
method print() maupun println(). Untuk media output lainnya (misalnya: file), method yang
digunakan untuk melakukan proses ini adalah write().
Selain
menggunakan System.out untuk menulis ke layar console, Java juga menyediakan kelas PrintWriter untuk
keperluan yang sama. PrintWriter adalah salah satu kelas stream yang berbasis pada data
karakter (character-based).Bentuk constructor dari kelas PrintWriter adalah
sebagai berikut:
PrintWriter(OutputStream outputStream, Boolean
flushOnNewLine)
Dimana outputStream adalah
objek dari OutputStream dan flushOnNewLineadalah parameter Boolean yang menyatakan apakah stream
output akan dibuang atau tidak setiap kali method println() dipanggil.
Seperti
halnya System.out, PrintWriter juga mendukung method print() dan println()untuk semua tipe data, termasuk yang berjenis objek; cara
kerjanya pun sama seperti pada saat menggunakan System.out. Apabila
argumen yang dilewatkan berupa objek, maka PrintWriter akan memanggil method toString() dari objek
bersangkutan, kemudian menampilkan
hasilnya. Cara pembentukan objek PrintWriter
untuk menampilkan output adalah sebagai berikut: