Selasa, 02 Desember 2014

Input dan Output Stream



1.      INPUT DAN OUTPUT STREAM

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.
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.

v  Stream ada dua jenis, yaitu:
  1. Stream byte digunakan untuk memberikan atau menyimpan informasi data dalam bentuk byte, misalnya untuk menulis dan membaca file biner.
  2. Sedangkan stream karakter pada proses I/O melibatkan data-data berbentuk karakter, misalnya proses baca/tulis ke suatu file teks, dengan menggunakan karakter Unicode.

v  Pendefinisian stream dilakukan dengan menggunakan 2 kelas abstrak, yaitu :
  1. InputStream dan OutputStream, sebagai superclass untuk kelas-kelas dalam kategori stream byte, dan kelas abstrak Reader dan Writer untuk kategori stream karakter.
  2. Melalui proses pewarisan (inheritance), semua kelas yang diturunkan dari InputStream maupun Reader akan memiliki method read(), yang digunakan dalam proses pembacaan data.Untuk proses penulisan data digunakan method write() dalam semua kelas yang diturunkan dari OutputStream maupun Writer.
v  Kelas System juga mendefinisikan tiga variabel stream, yaitu in, out, dan err, dimana data-datanya dideklarasikan sebagai public atau static.
  1. System.out adalah stream output standar dengan default layar console.
  2. System.in adalah objek dari tipe PrintStream, defaultnya berupa keyboard dan mengacu pada stream input standar.
  3.  Sedangkan pada stream error standar terdapat System.err yang secara default berupa layar console.

v  InputStream
Input Stream merupakan class abstrak sehingga  tidak dapat secara langsung menggunakan class ini .Subclass-subclass dari class ini yang akan memberikan fungsi khusus yang bervariasi.

Dua method utama dari Input Stream adalah :
a.       Read()
method ini digunakan untuk membaca stream.
b.      Close()
method ini digunakan untuk menutup koneksi input  stream.
v  OutputStream
OutputStream merupakan class abstrak tan tidak dapat langsung  digunakan dalam program .anda dapat menggunakan subclass dari outputstream dalam program.
Sebagian method-method OutputStream adalah:
a.       Void close()
menutup output stream yang aktif dan melepaskan sumber daya terkait dengan stream tersebut.
b.      Void flush()
melakukan flush output stream dan memaksa semua byte buffer untuk dituliskan keluar.
c.       Void write(byte[] b)
menulis sebanyak b.legth dari byte array ke output stream.

Data Output Stream dan Data Input Stream
v  Sebagian method DataOutputStream :
   writeDouble:
            berfungsi menuliskan data bertipe double ke output stream.
  writeInt:
            berfungsi menuliskan data integer ke Output Stream.
  writeBoolean:
            berfungsi menuliskan data Boolean ke Output Stream.
  readDouble():
            membaca data bertipe double.
v  Sebagian method DataOutputStream :
   reading():
            membaca data integer.
   readBoolean():
            membaca data Boolean.
Melakukan Input
Dalam Java, input 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.bentuk constructor dari BufferedReader sebagai berikut,
            BufferedReader(Reader inputReader)
inputReader adalah stream yang akan dihubungkan dengan objek dari kelas BufferedReader . 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.Sehingga untuk membuat objek BufferedReader yang dapat terhubung dengan keyboard, perlu digunakan kode berikut:
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);
  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 jugamenyediakan kelas PrintWriter untuk keperluan yang sama. PrintWriter adalah salahsatu kelas stream yang berbasis pada data karakter (character-based).
Contoh kodingan :
import java.io.*;
public class tes {
public static void main(String[]args) throws IOException {
System.out.print("Masukkan sembarang karakter : ");
char ch;
InputStreamReader isr = new InputStreamReader ystem.in);
BufferedReader br = new BufferedReader(isr);
ch = (char) br.read();
System.out.println("Karakter yang dimasukkan adalah " + ch );
}
}

output:
Masukkan sembarang karakter : 2
Karakter yang dimasukkan adalah 2

2.      Channel
Channels diibaratkan seperti Open Connection yang terhubung ke suatu Entity seperti peralatan Hardware, file, network socket,  atau komponen program yang berkemampuan dalam melakukan satu atau lebih operasi io yang berbeda. Seperti reading dan writing.
Contoh untuk mendapatkan FileChannel
FileInputStream fis = new FileInputStream("in.dat");
FileChannel fc = fis.getChannel();
// or
FileChannel fc = new FileInputStream("in.dat").getChannel();

       Channels dapat bersifat Open dan Closed.
Ketika Channels bersifat Open artinya dapat dikreasikan , sedangkan jika Channel telah Closed (tertutup) maka akan tetap Closed. Ketika Channel telah tertutup (closed), segala permintaan untuk menjalankan input dan output akan mengakibatkan ClosedChannelException menjadi terlempar (to be thrown).
       Untuk membuktikan apakah channel bersifat terbuka, digunkan method isOpen.
            boolean isOpen()
            mengembalikan jika dan hanya jika Channel bersifat terbuka.
       ClosedChannelException exception yang sudah diperiksa akan terlempar ketika sebuah usaha dilakukan untuk meminta operasi IO selama Channel Closed, atau setidaknya akan menutup operasi tersebut.
       Exception yang telah terlempar bukan berarti bahwa channel tersebut telah ditutup. Channel yang telah ditulis setengah, sebagai contohnya, mungkin akan tetap bisa dilihat hanya untuk dibaca.
Beberapa penjelasan dari beberapa fungsi channel :
       Channel Interface Merupakan perpanjangan (extends) dari beberapa interface lainnya.
       ReadableByteChannel interface adalah method baca yang membaca byte dari sebuah channel ke dalam buffer.
       WriteableByteChannel interface metode tulis yang menulis byte dari sebuah channel ke  dalam buffer.
       SeekableByteChannel interface merupakan perpanjangan dari ByteChannel merupakan method untuk menanyakan dan memodifikasi letak dan ukuran channel.
       ScatteringByteChannel dan GatheringByteChannel interface merupakan perpanjangan dari Readable.. dan Writeable.. Yang masing-masing method yang mengambil buffer sekaligus secara berurutan.


3.      Non Blocking IO
Non-blocking I/O adalah menangani koneksi yang banyak tanpa terjadi blocking I/O.
  Untuk mengangani koneksi I/O bersamaan jika kita membutuhkan high performance network I/O seperti router/server yang harus menerima koneksi bersamaan yang banyak, maka kita dapat menggunakan fasilitas API tersebut
  Prinsip kerja  I/O ini adalah multiplexing dari koneksi I/O yang bersamaan. Beberapa koneksi yang direpresentasikan oleh SocketChannel di-handle oleh sebuah Selector, selector akan melakukan mekanisme baca/tulis dari tiap channel secara serial (multiplexing) dengan cara menggambil buffer. 


http://uzi-online.blogspot.com/2000/11/kuliah-algoritma-pemrograman-java.html

1 komentar:

  1. Online Gambling - DrmCD
    Online Gambling is a casino 논산 출장안마 game or gambling term. Learn how to 성남 출장마사지 play and get 보령 출장샵 started in the casino world today. We teach you how to play 광명 출장안마 and win real money playing 제주 출장안마

    BalasHapus