SlideShare a Scribd company logo
J.E.N.I.



                                   BAB 12
                           Stream I/O Lanjut

12.1 Tujuan

Dalam module sebelumnya, Anda telah mempelajari bagaimana untuk mendapatkan
input user dan memanipulasi file-file menggunakan strea. Kini Anda akan mempelajari
lebih banyak tentang stream dan class-class stream yang lain.

Pada akhir pembahasan, diharapkan pembaca dapat :

1. Tahu tipe-tipe stream yang umum digunakan
2. Menggunakan class File dan methodnya
    Karakter dan Stream byte
    Input dan Output Streams
    Node dan Filter Streams
3. Menggunakan class-class Input/Output yang berbeda
    Reader
    Writer
    InputStream
    OutputStream
4. Memahami konsep dari stream chaining
5. Mendefinisikan serialisasi
6. Memahami penggunaan dari kata kunci transient
7. Menulis dan membaca dari sebuah object stream



12.2 Tipe-Tipe Stream yang Umum Digunakan
12.2.1 Stream Karakter dan Byte
Seperti yang telah disebutkan sebelumnya, secara umum ada dua tipe dari stream, yaitu
stream karakter dan byte. Kita hanya        mengulang perbedaan mendasar antara
keduanya. Stream byte adalah abstraksi file atau alat untuk data biner sedangkan
stream karakter adalah untuk karakter Unicode.

Class InputStream adalah abstraksi class root untuk semua input stream byte sedangkan
class OutputStream adalah class root abstraksi dari semua output stream byte. Untuk
stream karakter, superclasss yang sesuai dari semua class-class secara berturut-turut
adalah class Reader dan the Writer. Kedua class-class ini adalah abstraksi class-class
untuk membaca dan menulis stream karakter.


12.2.2 Input dan Output Stream
Stream juga dikategorikan berdasarkan apakah mereka digunakan untuk membaca atau
menulis stream.Walaupun ini sudah cukup nyata, Anda diperbolehkan untuk membaca


Pengenalan Pemrograman 2                                                            1
J.E.N.I.


dari input stream tapi tidak menulisnya. Di lain pihak, Anda diperbolehkan untuk menulis
output streams tapi tidak membacanya.

Class InputStream dan class Reader adalah superclass-superclass dari semua input
stream. Class OutputStream dan class Writer adalah class-class root dari semua output
stream.

Input stream juga dikenal sebagai stream sumber (source stream) sejak kita
memperoleh informasi dari stream ini. sementara itu output stream disebut juga stream
hasil(sink stream).

12.2.3 Node dan Stream Filter
Kini package java.io membedakan antara node dan stream filter. Sebuah stream node
adalah sebuah stream dengan fungsi dasar berupa fungsi membaca atau menulis dari
sebuah lokasi khusus seperti pada disk atau dari jaringan. Tipe-tipe dari stream node
terdiri atas file, memory dan jalur data. Stream filter, di lain pihak, diletakkan pada layer
stream node diantara threads atau proses untuk menyediakan fungsi tambahan yang
tidak dapat ditemukan dalam stream node oleh stream node itu sendiri. Penambahan
lapisan pada sebuah stream node disebut dengan stream chaining.

Sesi ini berturut-turut mempunyai sebuah tujuan dari class-class stream yang berbeda.
Untuk melengkapi daftar dari class-class ini, lihatlah pada dokumentasi Java's API.




Pengenalan Pemrograman 2                                                                   2
J.E.N.I.



12.3 Class File
Walaupun class File bukan merupakan class stream, ini sesuatu yag penting bahwa kita
mempelajari ini sejak class-class stream merupakan file-file yang telah dimanipulasi.
Class adalah sebuah perwakilan dari abstraksi dari file-file nyata dan nama path
direktori.

Untuk meng-instantiate sebuah object File, Anda dapat menggunakan constructor
berikut ini:

                               Sebuah Constructor File
File(String pathname)
Instantiate sebuah object File dengan nama path khusus sebagai nama filenya. Nama
filenya mungkin salah satu menjadi penuh( sebagai contoh, isi dengan path yang
lengkap) atau mungkin terdiri atas namafile itu sendiri dan diasumsikan menjadi diisi
dalam direktori tersebut.

                                  Table 1.2a: Constructor File


Class File menyediakan beberapa method untuk memanipulasi file dan direktori. Berikut
ini beberapa dari method-method tersebut.

                                  Method-method File
public String getName()
Mengembalikan nilai nama file atau nama direktori dari object File ini.
public boolean exists()
Menguji apakah sebuah file atau sebuah direktori masih ada atau tidak
public long length()
Mengembalikan nilai ukuran dari file.
public long lastModified()
Mengembalikan nilai tanggal dalam milidetik ketika file terakhir kali dimodifikasi.
public boolean canRead()
Mengembalikan nilai true jika dijinkan untuk membaca dari file. Sebaliknya, nilai
pengembaliannya bernilai false.
public boolean canWrite()
mengembalikan nilai true jika diijinkan untuk menulis ke sebuah file. Sebaliknya, nilai
pengembaliannya bernilai false.
public boolean isFile()
Menguji apakah object ini berupa sebuah file, yaitu persepsi normal kita tentang apa itu
sebuah file (bukan sebuah direktori) atau bukan.
public boolean isDirectory()
menguji apakah object ini adalah sebuah direktori atau bukan.
public String[] list()



Pengenalan Pemrograman 2                                                               3
J.E.N.I.


                                 Method-method File
Mengembalikan nilai daftar file dan subdirektori yang ada dalam object ini. Object ini
haruslah berupa sebuah direktori.
public void mkdir()
Membuat sebuah direktori yang merupakan abstraksi nama path ini.
public void delete()
Membuang file atau direktori yang sebenarnya diwakili oleh object File tersebut.

                               Table 1.2a: method-method File



Mari kita melihat bagaimana method ini bekerja berdasarkan contoh berikut ini :

              import java.io.*;

              public class FileInfoClass {
                 public static void main(String args[]) {
                    String fileName = args[0];
                    File fn = new File(fileName);
                    System.out.println("Name: " + fn.getName());
                    if (!fn.exists()) {
                       System.out.println(fileName + " does not exists.");
                       /* membuat sebuah temporary directory . */
                       System.out.println("Creating temp directory...");
                       fileName = "temp";
                       fn = new File(fileName);
                       fn.mkdir();
                       System.out.println(fileName +
                                  (fn.exists()? "exists": "does not exist"));
                       System.out.println("Deleting temp directory...");
                       fn.delete();
                       System.out.println(fileName +
                                  (fn.exists()? "exists": "does not exist"));
                       return;
                    }
                    System.out.println(fileName + " is a " +
                                    (fn.isFile()? "file." :"directory."));
                    if (fn.isDirectory()) {
                       String content[] = fn.list();
                       System.out.println("The content of this directory:");
                       for (int i = 0; i < content.length; i++) {
                          System.out.println(content[i]);
                       }
                    }
                    if (!fn.canRead()) {
                       System.out.println(fileName + " is not readable.");
                       return;
                    }
                    System.out.println(fileName + " is " + fn.length() +
                                                             " bytes long.");
                    System.out.println(fileName + " is " + fn.lastModified()
                                                           + " bytes long.");
                    if (!fn.canWrite()) {


Pengenalan Pemrograman 2                                                             4
J.E.N.I.


                           System.out.println(fileName + " is not writable.");
                      }
                  }
              }


12.4 Class Reader
Bagian ini menggambarkan stream karakter yang digunakan untuk membaca.


12.4.1 Method Reader
Class Reader terdiri atas beberapa method untuk membaca karakter. berikut ini adalah
beberapa method class :
                                   Method Reader
public int read(-) throws IOException
Sebuah method overload, yang mana memiliki tiga versi. Membaca karakter, segala
karakter array atau sebuah porsi untuk sebuah karakter array.
public int read() - membaca sebuah karakter tunggal.
public int read(char[]         cbuf)- Membaca karakter dan menyimpannya dalam
karakter array cbuf.
public abstract int read(char[] cbuf, int offset, int length)- Membaca
karakter sejumlah panjang karakter tertentu dan menyimpannya dalam karakter cbuf
dimulai pada tanda offset khusus yang telah ditentukan.
public abstract void close() throws IOException
Menutup Stream ini. Memanggil method Reader yang lain setelah menutup stream akan
menyebabkan suatu IOException dijalankan.
public void mark(int readAheadLimit) throws IOException
Menandai posisi tertentu pada stream. Setelah menandai, panggil untuk melakukan
reset() kemudian stream akan mencoba mengatur posisinya kembali pada titik ini.
Tidak semua stream input karakter mendukung operasi ini.
public boolean markSupported()
mengindikasikan apakah sebuah stream mendukung operasi pemberian tanda (mark)
atau tidak Tidak didukung oleh default. Seharusnya bersifat overid subclass.
public void reset() throws IOException
Reposisi stream ke posisi akhir stream yang telah ditandai


                                  Table 1.3.1: Method Reader




12.4.2 Class Node Reader
Berikut ini adalah beberapa dasar class Reader:


Pengenalan Pemrograman 2                                                           5
J.E.N.I.




                                Class-class Node Reader
FileReader
Untuk membaca file-file karakter.
CharArrayReader
Mengimplementasikan suatu karakter buffer yang dapat dibaca.
StringReader
Untuk membaca dari sebuah sumber string.
PipedReader
Digunakan untuk pasangan (dengan sebuah PipedWriter yang sesuai) oleh dua urutan
yang ingin berkomunikasi. Salah satu dari urutan tersebut membaca karakter dari
sumber tertentu.


                           Table 1.3.2: Class-class Node Reader Classes




12.4.3 Class-Class Filter Reader
Untuk menambah fungsi ke class-class dasar Reader, Anda dapat menggunakan class
stream filter. Berikut ini adalah beberapa dari class-class tersebut :

                                Class-Class Filter Reader
BufferedReader
mengizinkan penyimpanan sementara karakteryang bertujuan untuk menyediakan
fasilitas pembacaan karakter, arrays, dan bais yang lebih efisien.
FilterReader
Untuk membaca stream karakter yang telah terfilter.
InputStreamReader
Menkonversi pembacaan byte ke bentuk karakter.
LineNumberReader
Sebuah subclass dari class BufferedReader yang dapat menjaga memori penyimpanan
untuk nomor baris.
PushbackReader
Sebuah subclass dari class FilterReader yang memungkinkan karakter dikembalikan
atau tidak terbaca oleh stream.

                              Table 1.3.3: Class-class Filter Reader




Pengenalan Pemrograman 2                                                       6
J.E.N.I.



12.5 Class-Class Writer
Pada pembahasan ini menjelaskan tentang stream karakter yang digunakan untuk
menulis.

12.5.1 Writer Method
Class Writer terdiri atas beberapa method untuk menulis karakter. Berikut ini adalah
beberapa method class :

                                     Method Writer
public void write(-) throws IOException
Sebuah method overloading dalam lima versi:
public void write(int c) – Menulis sebuah karakter tunggal yang diwakili oleh
pemberian nilai integer.
public void write(char[] cbuf) – Menulis isi dari karakter array cbuf.
public abstract void write(char[] cbuf, int offset, int length) – Menulis
sejumlah length karakter dari aaray cbuf, dimulai pada offset tertentu.
public void write(String str) – Menulis string string.
public void write(String str, int offset, int length) – Menulis sejumlah
length karakter dari string str, dimulai pada offset tertentu.
public abstract void close() throws IOException
Menutup stream ini setelah flushing beberapa karaktr yang tidak tertulis. Invocation
method lain setelah menutup stream ini akan menyebabkan terjadinya IOException.
public abstract void flush()
Mengganti stream(yaitu karakter yang disimpan dalam buffer dengan segera ditulis ke
tujuan yang dimaksud).

                                  Table 1.4.1: Method Writer




12.5.2 Node Writer Classes
Berikut ini beberapa dasar class Writer:

                                 Node Writer Classes
FileWriter
Untuk menulis karakter ke sebuah file.
CharArrayWriter
Menggunakan karakter penyangga yang dapat dituliskan juga.
StringWriter
Untuk menulis source string
PipedWriter



Pengenalan Pemrograman 2                                                           7
J.E.N.I.


                                 Node Writer Classes
Digunakan dengan berpasangan(dengan menghubungkan PipedReader) oleh dua thread
yang ingin berkomunikasi. Satu dari thread ini menulis karakter ke stream ini.

                             Table 1.4.2: Node Writer classes




12.5.3 Filter Writer Classes
Untuk menambah fungsionalitas ke dasar class Writer, Anda dapat menggunakan class
stream filter.Terdapat beberapa class-class:
                                 Filter Writer Classes
BufferedWriter
Menyediakan penyangga karakter bertujuan untuk menyediakan efisiensi penulisan
karakter, array, dan garis.
FilterWriter
Untuk menulis stream karakter yang difilter.
OutputStreamWriter
Mengkodekan karakter yang ditulis ke dalam byte.
PrintWriter
Mencetak representasi yang diformat dari object ke dala stream text-output.

                               Table 1.4.3: Filter Writer classes




12.6 Contoh Dasar Reader/Writer
Contoh penggantian menggunakan class FileReader dan FileWriter. Dalam contoh ini,
program membaca dari file yang khusus oleh user dan mengkopi isi dari file ke file lain.

              import java.io.*;

              class CopyFile {
                 void copy(String input, String output) {
                    FileReader reader;
                    FileWriter writer;
                    int data;
                    try {
                       reader = new FileReader(input);
                       writer = new FileWriter(output);
                       while ((data = reader.read()) != -1) {
                          writer.write(data);
                       }
                       reader.close();
                       writer.close();
                    } catch (IOException ie) {
                       ie.printStackTrace();
                    }


Pengenalan Pemrograman 2                                                              8
J.E.N.I.


                  }

                  public static void main(String args[]) {
                     String inputFile = args[0];
                     String outputFile = args[1];
                     CopyFile cf = new CopyFile();
                     cf.copy(inputFile, outputFile);
                  }
              }

Cobalah program tersebut sendiri dan amatilah apa ang terjadi pada file yang
dimanipulasi.



12.7 Merubah Contoh Reader/Writer
Contoh pengganti hampir sama dengan contoh sebelumnya tetapi lebih efisien.
Walaupun membaca dan menulis ke stream sekali saja, karakter membaca yang
pertama disimpan dalam buffer sebelum penulisan karakter baris per baris. Program
menggunakan teknik dari perangkaian stream dimana clas FileReader dan FileWriter
didekorasi dengan class BufferedReader dan BufferedWriter, berurutan.
              import java.io.*;

              class CopyFile {
                 void copy(String input, String output) {
                    BufferedReader reader;
                    BufferedWriter writer;
                    String data;
                    try {
                       reader = new BufferedReader(new FileReader(input));
                       writer = new BufferedWriter(new FileWriter(output));
                       while ((data = reader.readLine()) != null) {
                          writer.write(data, 0, data.length());
                       }
                       reader.close();
                       writer.close();
                    } catch (IOException ie) {
                       ie.printStackTrace();
                    }
                 }

                  public static void main(String args[]) {
                     String inputFile = args[0];
                     String outputFile = args[1];
                     CopyFile cf = new CopyFile();
                     cf.copy(inputFile, outputFile);
                  }
              }

Bandingkan kode ini dengan sebelumnya. Apakah hasil dari menjalankan program ini?




Pengenalan Pemrograman 2                                                            9
J.E.N.I.



12.8 Class InputStream
Bagian ini memberikan gambaran perbedaan stream byte yang digunakan membaca.

12.8.1 Method InputStream
Class InputStream terdiri atas beberapa method untuk membaca byte. Beberapa method
class:

                                Method InputStream
public int read(-) throws IOException
Method overloaded, juga memiliki tiga versi seperti class Reader tersebut.
public abstract int read() - Membaca byte selanjutnya dari data dari stream ini.
public int read(byte[] bBuf)- Membaca sejumlah byte dan menyimpannya dalam
byta array bBuf.
public abstract int read(char[] cbuf, int offset, int length)- Membaca
panjang sejumlah length byte dan menyimpannya dalam array byte bBuf dimulai dari
offset tertentu.
public abstract void close() throws IOException
Menutup stream in. Memanggil method InputStream yang lain setelah menutup
streamnya akan menyebabkan sebuah IOException dijalankan.
public void mark(int readAheadLimit) throws IOException
Menandai posisi tertentu dalam stream. Setelah menandainya, panggil untuk
menjalankan fungsi reset() akan mencoba untuk mengatur posisi streamnya pada titik
tertentu kembali. Tidak semua stream input-byte mendukung operasi ini.
public boolean markSupported()
Mengindikasikan apakah suatu stream mendukung operasi pemberian tanda (mark) dan
reset. Yang tidak didukung secara default. Seharusnya diubah menjadi overide oleh
subclass.
public void reset() throws IOException
Merubah posisi stream pada posisi akhir yang diberi tanda (mark)

                              Table 1.7.1: Method InputStream




12.8.2 Class-Class Node InputStream
Berikut ini merupakan beberapaclass-class dasar InputStream :

                           Class-class Node InputStream
FileInputStream
Untuk membaca baris byte dari sebuah file
BufferedArrayInputStream




Pengenalan Pemrograman 2                                                           10
J.E.N.I.


                           Class-class Node InputStream
Mengimplementasikan sebua penimpan sementara yang terdiri atas data byte, yang
mungkin dpat dibaca dari streamnya.
PipedInputStream
Seharusnya terhubung ke sebuah PipedOutputStream. Stream ini secara khusus
digunakan oleh dua urutan yang didalamnya satu dari urutan tersebut membaca data
dari sumber ini sementara urutan yang lain menulis ke PipedOutputStream tujuan.

                           Table 1.7.2: class-class Node InputStream




12.8.3 Class-class Filter InputStream
Untuk menambah fungsi ke class dasar InputStream, Anda dapat menggunakan class
stream filter. Berikut ini adalah beberapa dari class-class tersebut :

                           Class-class Filter InputStream
BufferedInputStream
Sebuah subclass dari FilterInputStream yang memungkinkan penyimpanan input
sementara untuk menyediakan pembacaan byte yang lebih efisien.
FilterInputStream
Untuk membaca byte stream yang telah terfilter, yang mungkin memindahkan source
dasar dari data sepanjang proses dan menyediakan fungsi tambahan.
ObjectInputStream
Digunakan untuk serialisasi object. Deserialisasi object dan data primitif yang telah
tertulis sebelumnya menggunakan sebuahObjectOutputStream.
DataInputStream
Sebuah subclass dari FilterInputStream yang memerintahkan sebuah aplikasi membaca
data primitif Java dari sebuah input stream dasar dalam sebuah Mesin yang berjalan
secara bebas(machine-independent way).
LineNumberInputStream
Sebuah subclass FilterInputStream yang memungkinkan pemeriksaan posisi dari nomor
baris tertentu.
PushbackInputStream
Sebuah subclass dari class FilterInputStream yang memungkinkan byte diproses balik
atau tidak dibaca ke bentuk sreamnya.

                           Table 1.7.3: Class-class Filter InputStream




Pengenalan Pemrograman 2                                                           11
J.E.N.I.



12.9 Class-Class OutputStream
Pada pembahasan ini memberikan sebuah pandangan tentang byte stream yang berbeda
yang digunakan dalam proses penulisan.

12.9.1 Method OutputStream
Class OutputStream terdiri atas beberapa method untuk menulis data byte. Berikut ini
adalah beberapa dari class methodnya :

                               Method OutputStream
public void write(-) throws IOException
Sebuah method overloaded untuk menulis bentuk byte ke bentuk stream. Ada tiga versi
:
public abstract void write(int b) – Menulis nilai byte khusus b ke bentuk output
stream nya.
public void write(byte[] bBuf) – Menulis isi dari array byte bBuf ke bentuk stream
nya.
public void write(byte[] bBuf, int offset, int length) – Menulis sejumlah
length byte dari array bBuf ke bentuk streamnya, dimulai pada offset khusus ke
streamnya.
public abstract void close() throws IOException
Menutup stream ini dan mengeluarkan beberapa sumber dari sistem digabungkan
dengan streamnya. Penggunaan method lain setelah memanggil method ini akan
menyebabkan sebuahIOException dijalankan.
public abstract void flush()
Mengganti stream (sebagai contoh, data byte tersimpan dalam buffer akan segera
ditulis dalam tujuan yang diamksud).

                              Table 1.8.1: Method OutputStream




12.9.2 Class-Class Node OutputStream
Berikut ini adalah beberapa dari class dasar OutputStream :

                           Clas-class Node OutputStream
FileOutputStream
Untuk menulis byte ke sebuah file.
BufferedArrayOutputStream
Mengimplementasikan sebuah penyimpan sementara berupa byte, yang mana mungkin
akan dituliskan ke bentuk streamnya.
PipedOutputStream




Pengenalan Pemrograman 2                                                          12
J.E.N.I.


                            Clas-class Node OutputStream
Seharusnya tersambung ke sebuah PipedInputStream. Stream ini secara khusus
digunakan oleh dua urutan dimana didalamnya satu dari urutan tersebut menulis data
ke bentuk streamnya sementara urutan yang lain membaca dari PipedInputStream
tujuan.

                           Table 1.8.2: Class-class Node OutputStream




12.9.3 Class-Class Filter OutputStream
Untuk menambah fungsi ke class dasar OutputStream, Anda dapat menggunakan class
stream filter.berikut ini beberapa dari class tersebut :

                           Class-Class Filter OutputStream
BufferedOutputStream
Sebuah subclass dari FilterOutputStream yang memungkinkan penyimpanan output
sementara untuk proses penulisan byte yang lebih efisien. Memungkinkan penulisan
byte ke bentuk dasar output stream tanpa menyebabkan diperlukannya pemanggilan
dasar sistem untuk setiap penulisan byte.
FilterOutputStream
Untuk menulis stream byte yang telah difilter, yang mana mungkin dipindahkan ke
source dasar dari data sepanjang proses dan menyediakan fungsi tambahan.
ObjectOutputStream
Digunakan untuk serialisasi object. Serialisasi object dan data primitif untuk sebuah
OutputStream.
DataOutputStream
Sebuah subclass dari FilterOutputStream yang menjalankan aplikasi penulisan data
primitif ke output stream dasar ke dalam sebuah mesin yang bebas berjalan (machine-
independent way).
PrintStream
Sebuah subclass dari FilterOutputStream yang menyediakan kemampuan untuk
mencetak representasi dari nilai data yang bermacam-macam dengan tepat.

                           Table 1.8.3: Class-Class Filter OutputStream




Pengenalan Pemrograman 2                                                           13
J.E.N.I.



12.10 Contoh Dasar InputStream/OutputStream
Contoh berikut ini menggunakan class FileInputStream dan FileOutputStream untuk
membaca dari sebuah file khusus dan mengcopy isi dari file ini ke file yang lain.

              import java.io.*;

              class CopyFile {
                 void copy(String input, String output) {
                    FileInputStream inputStr;
                    FileOutputStream outputStr;
                    int data;
                    try {
                       inputStr = new FileInputStream(input);
                       outputStr = new FileOutputStream(output);
                       while ((data = inputStr.read()) != -1) {
                          outputStr.write(data);
                       }
                       inputStr.close();
                       outputStr.close();
                    } catch (IOException ie) {
                       ie.printStackTrace();
                    }
                 }

                  public static void main(String args[]) {
                     String inputFile = args[0];
                     String outputFile = args[1];
                     CopyFile cf = new CopyFile();
                     cf.copy(inputFile, outputFile);
                  }
              }




Pengenalan Pemrograman 2                                                       14
J.E.N.I.



12.11 Contoh Modifikasi
InputStream/OutputStream
Contoh berikutnya menggunakan class PushbackInputStream yang memanfaatkan
sebuah object FileInputStream dan class PrintStream.

              import java.io.*;

              class CopyFile {
                 void copy(String input) {
                    PushbackInputStream inputStr;
                    PrintStream outputStr;
                    int data;
                    try {
                       inputStr = new PushbackInputStream(new
                                                    FileInputStream(input));
                       outputStr = new PrintStream(System.out);
                       while ((data = inputStr.read()) != -1) {
                          outputStr.println("read data: " + (char) data);
                          inputStr.unread(data);
                          data = inputStr.read();
                          outputStr.println("unread data: " + (char) data);
                       }
                       inputStr.close();
                       outputStr.close();
                    } catch (IOException ie) {
                       ie.printStackTrace();
                    }
                 }

                  public static void main(String args[]) {
                     String inputFile = args[0];
                     CopyFile cf = new CopyFile();
                     cf.copy(inputFile);
                  }
              }

Uji kode ini pada sebuah file yang mengandung sedikit baris atau karakter.




Pengenalan Pemrograman 2                                                     15
J.E.N.I.



12.12 Serialisasi
Java Virtual Machine (JVM) mendukung kemampuan untuk membaca atau menulis
sebuah object ke bentuk stream. kemampuan ini disebut dengan serialisasi, proses
"flattening" sebuah object sehingga data tersebut dapat disimpan ke beberapa
penyimpanan permanen atau dilewatkan ke object lain melalui class OutputStream.
Ketika menulis sebuah object, ini merupakan hal yang penting bahwa keadaan tersebut
sudah tertulis dan telah diserialisasi dari setiap objectnya dapat dibangun kembali
sebagaimana dtaa tersebut dibaca. Menyimpan sebuah objectke beberapa tipe
penyimpanan permanen yang dikenal sebagai persistence.

Stream yang digunakan untuk deserialisasi dan serialisasi secara berurutan adalah class
ObjectInputStream dan ObjectOutputStream .

Untuk memungkinkan sebuah object diserialisasi (sebagai contoh dapat disimpan dan
diurutkan), Class tersebut harus mengimplementasikan interface yang dapat
diserialisasi. Class ini seharusnya juga menyediakan default constructor atau sebuah
constructor tanpa argumen. Satu hal yang baik mengenai kemampuan untuk melakukan
serialisasiyang dapat diturunkan, yang berarti kita tidak        memiliki implementasi
serialisasi pada setiap class. Ini berarti mengurangi pekrjaan untuk programmer. Anda
hanya dapat mengimplementasikan serialisasi sekali sepanjang hirarki class.

12.12.1 Kata Kunci transient
Ketika suatu object diserialisasi, tempat hanya disediakan untuk data object. Method dan
Constructor bukan merupakan bagian dari stream serialisasi. Ada beberapa object yang
tidak diserialisasi kaena data yang diwakilinya berubah secara konstan. Beberapa contoh
dari setiap object adalah object FileInputStream dan Object Thread. Sebuah
NotSerializableException dijalankan jika operasi serialisasi gagal karena beberapa
alasan.

Jangan berputus asa. Sebuah class yang mengandung object yang tidak diserialisasi
dapat tetap diserialisasi jika penunjuk ke object non-serialisasi ditandai dengan
katakunci transient. Pertimbangkan contoh berikut ini :

              class MyClass implements Serializable {
                 transient Thread thread;        //try removing transient
                 int data;
                 /* beberapa data yang lain*/
              }

Kata kunci transient mencagah data dari proses serialisasi. Object instantiasi dari class
ini sekarang dapat ditulis ke sebuah OutputStream.


12.12.2 Serialisasi: Menulis Suatu Object Stream
Untuk    menulis    object   ke    sebuah    stream, Anda perlu menggunakan
classObjectOutputStream class dan methodnya yaitu method writeObject. Method
writeObject memiliki tanda sebagai berikut :

             public final void writeObject(Object obj) throws IOException
dimana obj adalah object yang ditulis ke stream.



Pengenalan Pemrograman 2                                                               16
J.E.N.I.


Contoh dibawah ini menuliskan sebuah object Boolean ke sebuah ObjectOutputStream.
Class Boolean mengimplementasikan interface yang dapat di Serialisasi. Selanjutnya,
Instantiasi object dari class ini dapat ditulis ke dan dibaca dari sebuah stream.


              import java.io.*;

              public class SerializeBoolean {
                 SerializeBoolean() {
                    Boolean booleanData = new Boolean("true");

                      try {
                         FileOutputStream fos = new
                                              FileOutputStream("boolean.ser");
                         ObjectOutputStream oos = new ObjectOutputStream(fos);
                         oos.writeObject(booleanData);
                         oos.close();
                      } catch (IOException ie) {
                         ie.printStackTrace();
                      }
                  }

                  public static void main(String args[]) {
                     SerializeBoolean sb = new SerializeBoolean();
                  }
              }

12.12.3 Deserialisasi: Membaca Sebuah Object Stream
Untuk membaca sebuah object dari sebuah stream, Anda perlu menggunakan class
ObjectInputStream dan methodnya yaitu method readObject. Method readObject
memiliki tanda sebagai berikut :

              public final Object readObject()
                             throws IOException, ClassNotFoundException
dimana obj adalah object yang dibaca dari stream. tipe Object dikembalikan harus
melalui proses typecast ke nama class yang sesuai sebelum method pada class tersebut
dapat dieksekusi.

Contoh dibawah ini membaca sebuah object Boolean dari sebuah ObjectInputStream. Ini
merupakan kesinambungan dari contoh sebelumnya pada serialisasi.

              import java.io.*;

              public class UnserializeBoolean {
                  UnserializeBoolean() {
                    Boolean booleanData = null;

                      try {
                         FileInputStream fis = new
                                              FileInputStream("boolean.ser");
                         ObjectInputStream ois = new ObjectInputStream(fis);
                         booleanData = (Boolean) ois.readObject();
                         ois.close();
                      } catch (Exception e) {
                         e.printStackTrace();


Pengenalan Pemrograman 2                                                          17
J.E.N.I.


                      }
                      System.out.println("Unserialized Boolean from " +
                                         "boolean.ser");
                      System.out.println("Boolean data: " + booleanData);
                      System.out.println("Compare data with true: " +
                                   booleanData.equals(new Boolean("true")));
                  }

                  public static void main(String args[]) {
                     UnserializeBoolean usb = new UnserializeBoolean();
                  }
              }


12.13 Latihan
12.13.1 Enkripsi Sederhana
Baca dari sebuah file khusus oleh user dan encrypt isi file menggunakan teknik
penggeseran yang sederhana. Juga, tanyakan pada user untuk menginput ukuran
pergeseran. Output dari pesan yang telah di encrypt pada file yang lain yang memiliki
nama yang juga dibuat oleh user sendiri.

Sebagai contoh,
Ukuran pergeseran: 1
Pesan yang dibaca dari file: Hello
Pesan ter-encrypt: Ifmmp




Pengenalan Pemrograman 2                                                           18

More Related Content

What's hot

perintah perintah dasar CMD
perintah perintah dasar CMDperintah perintah dasar CMD
perintah perintah dasar CMD
tukang copy paste
 
Laporan praktikum 3 - Sistem Operasi Internal & External Command (Lanjutan)
Laporan praktikum 3 - Sistem Operasi Internal & External Command (Lanjutan)Laporan praktikum 3 - Sistem Operasi Internal & External Command (Lanjutan)
Laporan praktikum 3 - Sistem Operasi Internal & External Command (Lanjutan)Melina Krisnawati
 
Perintah internal dan perintah eksternal dos
Perintah internal dan perintah eksternal dosPerintah internal dan perintah eksternal dos
Perintah internal dan perintah eksternal dos
Reski Rahayu
 
Modul so praktikum
Modul so praktikumModul so praktikum
Modul so praktikum
joko2016
 
Laporan praktikum 2 - Sistem Operasi - internal command - copy con, rename,...
Laporan praktikum 2  - Sistem Operasi -  internal command - copy con, rename,...Laporan praktikum 2  - Sistem Operasi -  internal command - copy con, rename,...
Laporan praktikum 2 - Sistem Operasi - internal command - copy con, rename,...
Melina Krisnawati
 
Perintah dasar linux
Perintah dasar linux Perintah dasar linux
Perintah dasar linux
Rizal The-Xshoter
 
Sistem File
Sistem FileSistem File
Sistem File
Lusiana Diyan
 
Kumpulan perintah command prompt
Kumpulan perintah command promptKumpulan perintah command prompt
Kumpulan perintah command promptFakhri Cool
 
Perintah dasar linux (Pemula)
Perintah dasar linux (Pemula)Perintah dasar linux (Pemula)
Perintah dasar linux (Pemula)
Dayatx Dxd
 
Praktikum 3
Praktikum 3Praktikum 3
Praktikum 3
Indra Wijaya
 
Modul belajar java I/O (Input/Ouptut)
Modul belajar java I/O (Input/Ouptut)Modul belajar java I/O (Input/Ouptut)
Modul belajar java I/O (Input/Ouptut)
stephan EL'wiin Shaarawy
 
Laporan 14 Sistem Operasi Linux
Laporan 14 Sistem Operasi LinuxLaporan 14 Sistem Operasi Linux
Laporan 14 Sistem Operasi Linux
Ibrahim Naki
 
OPERASI INPUT OUTPUT di Linux
OPERASI INPUT OUTPUT di LinuxOPERASI INPUT OUTPUT di Linux
OPERASI INPUT OUTPUT di Linux
Ibrahim Naki
 
Perintah dasar terminal linux 2
Perintah dasar terminal linux 2Perintah dasar terminal linux 2
Perintah dasar terminal linux 2
yusri9908
 
Filesystem Heirarchy Standard
Filesystem Heirarchy StandardFilesystem Heirarchy Standard
Filesystem Heirarchy Standard
Ryudhatama Krisnamurti
 
Pengenalan Instalasi Novell Netware
Pengenalan Instalasi Novell NetwarePengenalan Instalasi Novell Netware
Pengenalan Instalasi Novell NetwareAri FX
 

What's hot (19)

perintah perintah dasar CMD
perintah perintah dasar CMDperintah perintah dasar CMD
perintah perintah dasar CMD
 
Laporan praktikum 3 - Sistem Operasi Internal & External Command (Lanjutan)
Laporan praktikum 3 - Sistem Operasi Internal & External Command (Lanjutan)Laporan praktikum 3 - Sistem Operasi Internal & External Command (Lanjutan)
Laporan praktikum 3 - Sistem Operasi Internal & External Command (Lanjutan)
 
Pertemuan13
Pertemuan13Pertemuan13
Pertemuan13
 
Modul1
Modul1Modul1
Modul1
 
Perintah internal dan perintah eksternal dos
Perintah internal dan perintah eksternal dosPerintah internal dan perintah eksternal dos
Perintah internal dan perintah eksternal dos
 
Modul so praktikum
Modul so praktikumModul so praktikum
Modul so praktikum
 
Perintah perintah dasar linux
Perintah perintah dasar linuxPerintah perintah dasar linux
Perintah perintah dasar linux
 
Laporan praktikum 2 - Sistem Operasi - internal command - copy con, rename,...
Laporan praktikum 2  - Sistem Operasi -  internal command - copy con, rename,...Laporan praktikum 2  - Sistem Operasi -  internal command - copy con, rename,...
Laporan praktikum 2 - Sistem Operasi - internal command - copy con, rename,...
 
Perintah dasar linux
Perintah dasar linux Perintah dasar linux
Perintah dasar linux
 
Sistem File
Sistem FileSistem File
Sistem File
 
Kumpulan perintah command prompt
Kumpulan perintah command promptKumpulan perintah command prompt
Kumpulan perintah command prompt
 
Perintah dasar linux (Pemula)
Perintah dasar linux (Pemula)Perintah dasar linux (Pemula)
Perintah dasar linux (Pemula)
 
Praktikum 3
Praktikum 3Praktikum 3
Praktikum 3
 
Modul belajar java I/O (Input/Ouptut)
Modul belajar java I/O (Input/Ouptut)Modul belajar java I/O (Input/Ouptut)
Modul belajar java I/O (Input/Ouptut)
 
Laporan 14 Sistem Operasi Linux
Laporan 14 Sistem Operasi LinuxLaporan 14 Sistem Operasi Linux
Laporan 14 Sistem Operasi Linux
 
OPERASI INPUT OUTPUT di Linux
OPERASI INPUT OUTPUT di LinuxOPERASI INPUT OUTPUT di Linux
OPERASI INPUT OUTPUT di Linux
 
Perintah dasar terminal linux 2
Perintah dasar terminal linux 2Perintah dasar terminal linux 2
Perintah dasar terminal linux 2
 
Filesystem Heirarchy Standard
Filesystem Heirarchy StandardFilesystem Heirarchy Standard
Filesystem Heirarchy Standard
 
Pengenalan Instalasi Novell Netware
Pengenalan Instalasi Novell NetwarePengenalan Instalasi Novell Netware
Pengenalan Instalasi Novell Netware
 

Viewers also liked

P Oral Ang T Dr
P Oral Ang T DrP Oral Ang T Dr
P Oral Ang T DrKaty
 
Presentatie Henk van Erp, Twinfield Masterclass
Presentatie Henk van Erp, Twinfield MasterclassPresentatie Henk van Erp, Twinfield Masterclass
Presentatie Henk van Erp, Twinfield Masterclass
Twinfield International, a Wolters Kluwer business
 
R3WiND MEDiA THRILLER OPENING IDEA'S
R3WiND MEDiA THRILLER OPENING IDEA'SR3WiND MEDiA THRILLER OPENING IDEA'S
R3WiND MEDiA THRILLER OPENING IDEA'S
Rahib
 
Jeni J2 Me Bab02 Memulai Pemrograman Mobile
Jeni J2 Me Bab02 Memulai Pemrograman MobileJeni J2 Me Bab02 Memulai Pemrograman Mobile
Jeni J2 Me Bab02 Memulai Pemrograman MobileIndividual Consultants
 
The European Commitment to Wilderness - Report from Prague by Dr. Frantisek Pelc
The European Commitment to Wilderness - Report from Prague by Dr. Frantisek PelcThe European Commitment to Wilderness - Report from Prague by Dr. Frantisek Pelc
The European Commitment to Wilderness - Report from Prague by Dr. Frantisek Pelc
WILD Foundation
 
Jeni Intro1 Bab04 Dasar Dasar Pemrograman
Jeni Intro1 Bab04 Dasar Dasar PemrogramanJeni Intro1 Bab04 Dasar Dasar Pemrograman
Jeni Intro1 Bab04 Dasar Dasar PemrogramanIndividual Consultants
 
Magnifying Organic SEO via Infographics
Magnifying Organic SEO via InfographicsMagnifying Organic SEO via Infographics
Magnifying Organic SEO via Infographics
shuey03
 

Viewers also liked (9)

P Oral Ang T Dr
P Oral Ang T DrP Oral Ang T Dr
P Oral Ang T Dr
 
Presentatie Henk van Erp, Twinfield Masterclass
Presentatie Henk van Erp, Twinfield MasterclassPresentatie Henk van Erp, Twinfield Masterclass
Presentatie Henk van Erp, Twinfield Masterclass
 
R3WiND MEDiA THRILLER OPENING IDEA'S
R3WiND MEDiA THRILLER OPENING IDEA'SR3WiND MEDiA THRILLER OPENING IDEA'S
R3WiND MEDiA THRILLER OPENING IDEA'S
 
Jeni J2 Me Bab02 Memulai Pemrograman Mobile
Jeni J2 Me Bab02 Memulai Pemrograman MobileJeni J2 Me Bab02 Memulai Pemrograman Mobile
Jeni J2 Me Bab02 Memulai Pemrograman Mobile
 
The European Commitment to Wilderness - Report from Prague by Dr. Frantisek Pelc
The European Commitment to Wilderness - Report from Prague by Dr. Frantisek PelcThe European Commitment to Wilderness - Report from Prague by Dr. Frantisek Pelc
The European Commitment to Wilderness - Report from Prague by Dr. Frantisek Pelc
 
Jeni Intro1 Bab04 Dasar Dasar Pemrograman
Jeni Intro1 Bab04 Dasar Dasar PemrogramanJeni Intro1 Bab04 Dasar Dasar Pemrograman
Jeni Intro1 Bab04 Dasar Dasar Pemrograman
 
Ad-journal
Ad-journalAd-journal
Ad-journal
 
lab4_php
lab4_phplab4_php
lab4_php
 
Magnifying Organic SEO via Infographics
Magnifying Organic SEO via InfographicsMagnifying Organic SEO via Infographics
Magnifying Organic SEO via Infographics
 

Similar to Jeni Intro2 Bab12 Stream Io Lanjut

Meeting 4 - operasi file dan struktur direktori-handout
Meeting 4 - operasi file dan struktur direktori-handoutMeeting 4 - operasi file dan struktur direktori-handout
Meeting 4 - operasi file dan struktur direktori-handout
Syaiful Ahdan
 
Praktikum Sistem Operasi Linux (3)
Praktikum Sistem Operasi Linux (3)Praktikum Sistem Operasi Linux (3)
Praktikum Sistem Operasi Linux (3)
Mirza Afrizal
 
2 file dan directory
2  file dan directory2  file dan directory
2 file dan directory
Fajar Baskoro
 
Sistem File
Sistem FileSistem File
Sistem File
eddie Ismantoe
 
42519051 Bab 9 Sistem berkas
42519051 Bab 9 Sistem berkas42519051 Bab 9 Sistem berkas
42519051 Bab 9 Sistem berkas
AbdulRahman1543
 
2 ka24 sistem operasi- 2ka24_sistem operasi- materi sistem file
2 ka24 sistem operasi- 2ka24_sistem operasi- materi sistem file2 ka24 sistem operasi- 2ka24_sistem operasi- materi sistem file
2 ka24 sistem operasi- 2ka24_sistem operasi- materi sistem file
Alvin Setiawan
 
Sistem_Operasi_FILKOMUB_2016_Bab 2_materi
Sistem_Operasi_FILKOMUB_2016_Bab 2_materiSistem_Operasi_FILKOMUB_2016_Bab 2_materi
Sistem_Operasi_FILKOMUB_2016_Bab 2_materi
Ilham Arfian
 
Zulyanti Megasari - Manajemen File
Zulyanti Megasari -  Manajemen FileZulyanti Megasari -  Manajemen File
Zulyanti Megasari - Manajemen File
belajarkomputer
 
Manajemen File
Manajemen FileManajemen File
Praktikum ii linux file system
Praktikum ii linux file systemPraktikum ii linux file system
Praktikum ii linux file systemMooksHal Mhiestri
 
Sistem berkas lr
Sistem berkas lrSistem berkas lr
Sistem berkas lr
Leonardo024
 
Pengantar Sistem Berkas
Pengantar Sistem BerkasPengantar Sistem Berkas
Pengantar Sistem Berkas
formatik
 
Sistem operasi sistem file linux
Sistem operasi sistem file linuxSistem operasi sistem file linux
Sistem operasi sistem file linux
mupidah ptik
 
Sistem berkas (file)
Sistem berkas (file)Sistem berkas (file)
Sistem berkas (file)
Yendri Ikhlas Fernando
 
MANAJEMEN FILE IO DENGAN PYTHON.pptx
MANAJEMEN FILE IO DENGAN PYTHON.pptxMANAJEMEN FILE IO DENGAN PYTHON.pptx
MANAJEMEN FILE IO DENGAN PYTHON.pptx
HanisSiddiq2
 
Fhs(file system hierarchy)
Fhs(file system hierarchy)Fhs(file system hierarchy)
Fhs(file system hierarchy)
Fajar M Reza Reza
 

Similar to Jeni Intro2 Bab12 Stream Io Lanjut (20)

Meeting 4 - operasi file dan struktur direktori-handout
Meeting 4 - operasi file dan struktur direktori-handoutMeeting 4 - operasi file dan struktur direktori-handout
Meeting 4 - operasi file dan struktur direktori-handout
 
Pertemuan4
Pertemuan4Pertemuan4
Pertemuan4
 
Praktikum Sistem Operasi Linux (3)
Praktikum Sistem Operasi Linux (3)Praktikum Sistem Operasi Linux (3)
Praktikum Sistem Operasi Linux (3)
 
2 file dan directory
2  file dan directory2  file dan directory
2 file dan directory
 
Sistem File
Sistem FileSistem File
Sistem File
 
42519051 Bab 9 Sistem berkas
42519051 Bab 9 Sistem berkas42519051 Bab 9 Sistem berkas
42519051 Bab 9 Sistem berkas
 
2 ka24 sistem operasi- 2ka24_sistem operasi- materi sistem file
2 ka24 sistem operasi- 2ka24_sistem operasi- materi sistem file2 ka24 sistem operasi- 2ka24_sistem operasi- materi sistem file
2 ka24 sistem operasi- 2ka24_sistem operasi- materi sistem file
 
Sistem_Operasi_FILKOMUB_2016_Bab 2_materi
Sistem_Operasi_FILKOMUB_2016_Bab 2_materiSistem_Operasi_FILKOMUB_2016_Bab 2_materi
Sistem_Operasi_FILKOMUB_2016_Bab 2_materi
 
Zulyanti Megasari - Manajemen File
Zulyanti Megasari -  Manajemen FileZulyanti Megasari -  Manajemen File
Zulyanti Megasari - Manajemen File
 
Pengertian sistem berkas
Pengertian sistem berkasPengertian sistem berkas
Pengertian sistem berkas
 
Manajemen File
Manajemen FileManajemen File
Manajemen File
 
Praktikum ii linux file system
Praktikum ii linux file systemPraktikum ii linux file system
Praktikum ii linux file system
 
Sistem berkas lr
Sistem berkas lrSistem berkas lr
Sistem berkas lr
 
Pengantar Sistem Berkas
Pengantar Sistem BerkasPengantar Sistem Berkas
Pengantar Sistem Berkas
 
Sistem operasi sistem file linux
Sistem operasi sistem file linuxSistem operasi sistem file linux
Sistem operasi sistem file linux
 
Sistem berkas (file)
Sistem berkas (file)Sistem berkas (file)
Sistem berkas (file)
 
MANAJEMEN FILE IO DENGAN PYTHON.pptx
MANAJEMEN FILE IO DENGAN PYTHON.pptxMANAJEMEN FILE IO DENGAN PYTHON.pptx
MANAJEMEN FILE IO DENGAN PYTHON.pptx
 
Fhs(file system hierarchy)
Fhs(file system hierarchy)Fhs(file system hierarchy)
Fhs(file system hierarchy)
 
Java
JavaJava
Java
 
Arsip akses materi2
Arsip akses materi2Arsip akses materi2
Arsip akses materi2
 

More from Individual Consultants

24602905 Karsten Nohl
24602905  Karsten  Nohl24602905  Karsten  Nohl
24602905 Karsten Nohl
Individual Consultants
 
O T O M A S I P E N G A W A S R U M A H D E N G A N M E N G G U N A K A N...
O T O M A S I  P E N G A W A S  R U M A H  D E N G A N  M E N G G U N A K A N...O T O M A S I  P E N G A W A S  R U M A H  D E N G A N  M E N G G U N A K A N...
O T O M A S I P E N G A W A S R U M A H D E N G A N M E N G G U N A K A N...
Individual Consultants
 
Sistem Penyadapan Intruder In The Darkness
Sistem  Penyadapan  Intruder In  The  DarknessSistem  Penyadapan  Intruder In  The  Darkness
Sistem Penyadapan Intruder In The Darkness
Individual Consultants
 
P R O S P E K T U S P E R U S A H A A N I K K I G R O U P D E N G A N C ...
P R O S P E K T U S  P E R U S A H A A N  I K K I  G R O U P  D E N G A N  C ...P R O S P E K T U S  P E R U S A H A A N  I K K I  G R O U P  D E N G A N  C ...
P R O S P E K T U S P E R U S A H A A N I K K I G R O U P D E N G A N C ...
Individual Consultants
 
Jeni Web Programming Bab 16 App Case Study
Jeni Web Programming Bab 16 App Case StudyJeni Web Programming Bab 16 App Case Study
Jeni Web Programming Bab 16 App Case StudyIndividual Consultants
 
Jeni Web Programming Bab 15 J2 Ee Design Pattern
Jeni Web Programming Bab 15 J2 Ee Design PatternJeni Web Programming Bab 15 J2 Ee Design Pattern
Jeni Web Programming Bab 15 J2 Ee Design PatternIndividual Consultants
 
Jeni Web Programming Bab 5 Sql Dan Jdbc
Jeni Web Programming Bab 5 Sql Dan JdbcJeni Web Programming Bab 5 Sql Dan Jdbc
Jeni Web Programming Bab 5 Sql Dan JdbcIndividual Consultants
 
Jeni Web Programming Bab 10 Advanced Jsf
Jeni Web Programming Bab 10 Advanced JsfJeni Web Programming Bab 10 Advanced Jsf
Jeni Web Programming Bab 10 Advanced JsfIndividual Consultants
 
Jeni Web Programming Bab 8 Advanced Mvc
Jeni Web Programming Bab 8 Advanced MvcJeni Web Programming Bab 8 Advanced Mvc
Jeni Web Programming Bab 8 Advanced MvcIndividual Consultants
 
Jeni Web Programming Bab 3 Advanced Servlets
Jeni Web Programming Bab 3 Advanced ServletsJeni Web Programming Bab 3 Advanced Servlets
Jeni Web Programming Bab 3 Advanced ServletsIndividual Consultants
 
Jeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsJeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsIndividual Consultants
 
Jeni Web Programming Bab 1 Pengenalan Pemrograman Web
Jeni Web Programming Bab 1 Pengenalan Pemrograman WebJeni Web Programming Bab 1 Pengenalan Pemrograman Web
Jeni Web Programming Bab 1 Pengenalan Pemrograman WebIndividual Consultants
 

More from Individual Consultants (20)

24602905 Karsten Nohl
24602905  Karsten  Nohl24602905  Karsten  Nohl
24602905 Karsten Nohl
 
O T O M A S I P E N G A W A S R U M A H D E N G A N M E N G G U N A K A N...
O T O M A S I  P E N G A W A S  R U M A H  D E N G A N  M E N G G U N A K A N...O T O M A S I  P E N G A W A S  R U M A H  D E N G A N  M E N G G U N A K A N...
O T O M A S I P E N G A W A S R U M A H D E N G A N M E N G G U N A K A N...
 
Sistem Penyadapan Intruder In The Darkness
Sistem  Penyadapan  Intruder In  The  DarknessSistem  Penyadapan  Intruder In  The  Darkness
Sistem Penyadapan Intruder In The Darkness
 
P R O S P E K T U S P E R U S A H A A N I K K I G R O U P D E N G A N C ...
P R O S P E K T U S  P E R U S A H A A N  I K K I  G R O U P  D E N G A N  C ...P R O S P E K T U S  P E R U S A H A A N  I K K I  G R O U P  D E N G A N  C ...
P R O S P E K T U S P E R U S A H A A N I K K I G R O U P D E N G A N C ...
 
Jeni Web Programming Cover
Jeni Web Programming CoverJeni Web Programming Cover
Jeni Web Programming Cover
 
Jeni Web Programming Bab 16 App Case Study
Jeni Web Programming Bab 16 App Case StudyJeni Web Programming Bab 16 App Case Study
Jeni Web Programming Bab 16 App Case Study
 
Jeni Web Programming Bab 15 J2 Ee Design Pattern
Jeni Web Programming Bab 15 J2 Ee Design PatternJeni Web Programming Bab 15 J2 Ee Design Pattern
Jeni Web Programming Bab 15 J2 Ee Design Pattern
 
Jeni Web Programming Bab 5 Sql Dan Jdbc
Jeni Web Programming Bab 5 Sql Dan JdbcJeni Web Programming Bab 5 Sql Dan Jdbc
Jeni Web Programming Bab 5 Sql Dan Jdbc
 
Jeni Web Programming Bab 10 Advanced Jsf
Jeni Web Programming Bab 10 Advanced JsfJeni Web Programming Bab 10 Advanced Jsf
Jeni Web Programming Bab 10 Advanced Jsf
 
Jeni Web Programming Bab 9 Jsf
Jeni Web Programming Bab 9 JsfJeni Web Programming Bab 9 Jsf
Jeni Web Programming Bab 9 Jsf
 
Jeni Web Programming Bab 8 Advanced Mvc
Jeni Web Programming Bab 8 Advanced MvcJeni Web Programming Bab 8 Advanced Mvc
Jeni Web Programming Bab 8 Advanced Mvc
 
Jeni Web Programming Bab 7 Mvc Intro
Jeni Web Programming Bab 7 Mvc IntroJeni Web Programming Bab 7 Mvc Intro
Jeni Web Programming Bab 7 Mvc Intro
 
Jeni Web Programming Bab 4 Dasar Jsp
Jeni Web Programming Bab 4 Dasar JspJeni Web Programming Bab 4 Dasar Jsp
Jeni Web Programming Bab 4 Dasar Jsp
 
Jeni Web Programming Bab 3 Advanced Servlets
Jeni Web Programming Bab 3 Advanced ServletsJeni Web Programming Bab 3 Advanced Servlets
Jeni Web Programming Bab 3 Advanced Servlets
 
Jeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsJeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic Servlets
 
Jeni Web Programming Bab 1 Pengenalan Pemrograman Web
Jeni Web Programming Bab 1 Pengenalan Pemrograman WebJeni Web Programming Bab 1 Pengenalan Pemrograman Web
Jeni Web Programming Bab 1 Pengenalan Pemrograman Web
 
Jeni J2 Me Bab11 Topik Topik Tambahan
Jeni J2 Me Bab11 Topik Topik TambahanJeni J2 Me Bab11 Topik Topik Tambahan
Jeni J2 Me Bab11 Topik Topik Tambahan
 
Jeni J2 Me Bab10 Optional%20 Packages
Jeni J2 Me Bab10 Optional%20 PackagesJeni J2 Me Bab10 Optional%20 Packages
Jeni J2 Me Bab10 Optional%20 Packages
 
Jeni J2 Me Bab09 Optimisasi
Jeni J2 Me Bab09 OptimisasiJeni J2 Me Bab09 Optimisasi
Jeni J2 Me Bab09 Optimisasi
 
Jeni J2 Me Bab08 Web Services
Jeni J2 Me Bab08 Web ServicesJeni J2 Me Bab08 Web Services
Jeni J2 Me Bab08 Web Services
 

Jeni Intro2 Bab12 Stream Io Lanjut

  • 1. J.E.N.I. BAB 12 Stream I/O Lanjut 12.1 Tujuan Dalam module sebelumnya, Anda telah mempelajari bagaimana untuk mendapatkan input user dan memanipulasi file-file menggunakan strea. Kini Anda akan mempelajari lebih banyak tentang stream dan class-class stream yang lain. Pada akhir pembahasan, diharapkan pembaca dapat : 1. Tahu tipe-tipe stream yang umum digunakan 2. Menggunakan class File dan methodnya  Karakter dan Stream byte  Input dan Output Streams  Node dan Filter Streams 3. Menggunakan class-class Input/Output yang berbeda  Reader  Writer  InputStream  OutputStream 4. Memahami konsep dari stream chaining 5. Mendefinisikan serialisasi 6. Memahami penggunaan dari kata kunci transient 7. Menulis dan membaca dari sebuah object stream 12.2 Tipe-Tipe Stream yang Umum Digunakan 12.2.1 Stream Karakter dan Byte Seperti yang telah disebutkan sebelumnya, secara umum ada dua tipe dari stream, yaitu stream karakter dan byte. Kita hanya mengulang perbedaan mendasar antara keduanya. Stream byte adalah abstraksi file atau alat untuk data biner sedangkan stream karakter adalah untuk karakter Unicode. Class InputStream adalah abstraksi class root untuk semua input stream byte sedangkan class OutputStream adalah class root abstraksi dari semua output stream byte. Untuk stream karakter, superclasss yang sesuai dari semua class-class secara berturut-turut adalah class Reader dan the Writer. Kedua class-class ini adalah abstraksi class-class untuk membaca dan menulis stream karakter. 12.2.2 Input dan Output Stream Stream juga dikategorikan berdasarkan apakah mereka digunakan untuk membaca atau menulis stream.Walaupun ini sudah cukup nyata, Anda diperbolehkan untuk membaca Pengenalan Pemrograman 2 1
  • 2. J.E.N.I. dari input stream tapi tidak menulisnya. Di lain pihak, Anda diperbolehkan untuk menulis output streams tapi tidak membacanya. Class InputStream dan class Reader adalah superclass-superclass dari semua input stream. Class OutputStream dan class Writer adalah class-class root dari semua output stream. Input stream juga dikenal sebagai stream sumber (source stream) sejak kita memperoleh informasi dari stream ini. sementara itu output stream disebut juga stream hasil(sink stream). 12.2.3 Node dan Stream Filter Kini package java.io membedakan antara node dan stream filter. Sebuah stream node adalah sebuah stream dengan fungsi dasar berupa fungsi membaca atau menulis dari sebuah lokasi khusus seperti pada disk atau dari jaringan. Tipe-tipe dari stream node terdiri atas file, memory dan jalur data. Stream filter, di lain pihak, diletakkan pada layer stream node diantara threads atau proses untuk menyediakan fungsi tambahan yang tidak dapat ditemukan dalam stream node oleh stream node itu sendiri. Penambahan lapisan pada sebuah stream node disebut dengan stream chaining. Sesi ini berturut-turut mempunyai sebuah tujuan dari class-class stream yang berbeda. Untuk melengkapi daftar dari class-class ini, lihatlah pada dokumentasi Java's API. Pengenalan Pemrograman 2 2
  • 3. J.E.N.I. 12.3 Class File Walaupun class File bukan merupakan class stream, ini sesuatu yag penting bahwa kita mempelajari ini sejak class-class stream merupakan file-file yang telah dimanipulasi. Class adalah sebuah perwakilan dari abstraksi dari file-file nyata dan nama path direktori. Untuk meng-instantiate sebuah object File, Anda dapat menggunakan constructor berikut ini: Sebuah Constructor File File(String pathname) Instantiate sebuah object File dengan nama path khusus sebagai nama filenya. Nama filenya mungkin salah satu menjadi penuh( sebagai contoh, isi dengan path yang lengkap) atau mungkin terdiri atas namafile itu sendiri dan diasumsikan menjadi diisi dalam direktori tersebut. Table 1.2a: Constructor File Class File menyediakan beberapa method untuk memanipulasi file dan direktori. Berikut ini beberapa dari method-method tersebut. Method-method File public String getName() Mengembalikan nilai nama file atau nama direktori dari object File ini. public boolean exists() Menguji apakah sebuah file atau sebuah direktori masih ada atau tidak public long length() Mengembalikan nilai ukuran dari file. public long lastModified() Mengembalikan nilai tanggal dalam milidetik ketika file terakhir kali dimodifikasi. public boolean canRead() Mengembalikan nilai true jika dijinkan untuk membaca dari file. Sebaliknya, nilai pengembaliannya bernilai false. public boolean canWrite() mengembalikan nilai true jika diijinkan untuk menulis ke sebuah file. Sebaliknya, nilai pengembaliannya bernilai false. public boolean isFile() Menguji apakah object ini berupa sebuah file, yaitu persepsi normal kita tentang apa itu sebuah file (bukan sebuah direktori) atau bukan. public boolean isDirectory() menguji apakah object ini adalah sebuah direktori atau bukan. public String[] list() Pengenalan Pemrograman 2 3
  • 4. J.E.N.I. Method-method File Mengembalikan nilai daftar file dan subdirektori yang ada dalam object ini. Object ini haruslah berupa sebuah direktori. public void mkdir() Membuat sebuah direktori yang merupakan abstraksi nama path ini. public void delete() Membuang file atau direktori yang sebenarnya diwakili oleh object File tersebut. Table 1.2a: method-method File Mari kita melihat bagaimana method ini bekerja berdasarkan contoh berikut ini : import java.io.*; public class FileInfoClass { public static void main(String args[]) { String fileName = args[0]; File fn = new File(fileName); System.out.println("Name: " + fn.getName()); if (!fn.exists()) { System.out.println(fileName + " does not exists."); /* membuat sebuah temporary directory . */ System.out.println("Creating temp directory..."); fileName = "temp"; fn = new File(fileName); fn.mkdir(); System.out.println(fileName + (fn.exists()? "exists": "does not exist")); System.out.println("Deleting temp directory..."); fn.delete(); System.out.println(fileName + (fn.exists()? "exists": "does not exist")); return; } System.out.println(fileName + " is a " + (fn.isFile()? "file." :"directory.")); if (fn.isDirectory()) { String content[] = fn.list(); System.out.println("The content of this directory:"); for (int i = 0; i < content.length; i++) { System.out.println(content[i]); } } if (!fn.canRead()) { System.out.println(fileName + " is not readable."); return; } System.out.println(fileName + " is " + fn.length() + " bytes long."); System.out.println(fileName + " is " + fn.lastModified() + " bytes long."); if (!fn.canWrite()) { Pengenalan Pemrograman 2 4
  • 5. J.E.N.I. System.out.println(fileName + " is not writable."); } } } 12.4 Class Reader Bagian ini menggambarkan stream karakter yang digunakan untuk membaca. 12.4.1 Method Reader Class Reader terdiri atas beberapa method untuk membaca karakter. berikut ini adalah beberapa method class : Method Reader public int read(-) throws IOException Sebuah method overload, yang mana memiliki tiga versi. Membaca karakter, segala karakter array atau sebuah porsi untuk sebuah karakter array. public int read() - membaca sebuah karakter tunggal. public int read(char[] cbuf)- Membaca karakter dan menyimpannya dalam karakter array cbuf. public abstract int read(char[] cbuf, int offset, int length)- Membaca karakter sejumlah panjang karakter tertentu dan menyimpannya dalam karakter cbuf dimulai pada tanda offset khusus yang telah ditentukan. public abstract void close() throws IOException Menutup Stream ini. Memanggil method Reader yang lain setelah menutup stream akan menyebabkan suatu IOException dijalankan. public void mark(int readAheadLimit) throws IOException Menandai posisi tertentu pada stream. Setelah menandai, panggil untuk melakukan reset() kemudian stream akan mencoba mengatur posisinya kembali pada titik ini. Tidak semua stream input karakter mendukung operasi ini. public boolean markSupported() mengindikasikan apakah sebuah stream mendukung operasi pemberian tanda (mark) atau tidak Tidak didukung oleh default. Seharusnya bersifat overid subclass. public void reset() throws IOException Reposisi stream ke posisi akhir stream yang telah ditandai Table 1.3.1: Method Reader 12.4.2 Class Node Reader Berikut ini adalah beberapa dasar class Reader: Pengenalan Pemrograman 2 5
  • 6. J.E.N.I. Class-class Node Reader FileReader Untuk membaca file-file karakter. CharArrayReader Mengimplementasikan suatu karakter buffer yang dapat dibaca. StringReader Untuk membaca dari sebuah sumber string. PipedReader Digunakan untuk pasangan (dengan sebuah PipedWriter yang sesuai) oleh dua urutan yang ingin berkomunikasi. Salah satu dari urutan tersebut membaca karakter dari sumber tertentu. Table 1.3.2: Class-class Node Reader Classes 12.4.3 Class-Class Filter Reader Untuk menambah fungsi ke class-class dasar Reader, Anda dapat menggunakan class stream filter. Berikut ini adalah beberapa dari class-class tersebut : Class-Class Filter Reader BufferedReader mengizinkan penyimpanan sementara karakteryang bertujuan untuk menyediakan fasilitas pembacaan karakter, arrays, dan bais yang lebih efisien. FilterReader Untuk membaca stream karakter yang telah terfilter. InputStreamReader Menkonversi pembacaan byte ke bentuk karakter. LineNumberReader Sebuah subclass dari class BufferedReader yang dapat menjaga memori penyimpanan untuk nomor baris. PushbackReader Sebuah subclass dari class FilterReader yang memungkinkan karakter dikembalikan atau tidak terbaca oleh stream. Table 1.3.3: Class-class Filter Reader Pengenalan Pemrograman 2 6
  • 7. J.E.N.I. 12.5 Class-Class Writer Pada pembahasan ini menjelaskan tentang stream karakter yang digunakan untuk menulis. 12.5.1 Writer Method Class Writer terdiri atas beberapa method untuk menulis karakter. Berikut ini adalah beberapa method class : Method Writer public void write(-) throws IOException Sebuah method overloading dalam lima versi: public void write(int c) – Menulis sebuah karakter tunggal yang diwakili oleh pemberian nilai integer. public void write(char[] cbuf) – Menulis isi dari karakter array cbuf. public abstract void write(char[] cbuf, int offset, int length) – Menulis sejumlah length karakter dari aaray cbuf, dimulai pada offset tertentu. public void write(String str) – Menulis string string. public void write(String str, int offset, int length) – Menulis sejumlah length karakter dari string str, dimulai pada offset tertentu. public abstract void close() throws IOException Menutup stream ini setelah flushing beberapa karaktr yang tidak tertulis. Invocation method lain setelah menutup stream ini akan menyebabkan terjadinya IOException. public abstract void flush() Mengganti stream(yaitu karakter yang disimpan dalam buffer dengan segera ditulis ke tujuan yang dimaksud). Table 1.4.1: Method Writer 12.5.2 Node Writer Classes Berikut ini beberapa dasar class Writer: Node Writer Classes FileWriter Untuk menulis karakter ke sebuah file. CharArrayWriter Menggunakan karakter penyangga yang dapat dituliskan juga. StringWriter Untuk menulis source string PipedWriter Pengenalan Pemrograman 2 7
  • 8. J.E.N.I. Node Writer Classes Digunakan dengan berpasangan(dengan menghubungkan PipedReader) oleh dua thread yang ingin berkomunikasi. Satu dari thread ini menulis karakter ke stream ini. Table 1.4.2: Node Writer classes 12.5.3 Filter Writer Classes Untuk menambah fungsionalitas ke dasar class Writer, Anda dapat menggunakan class stream filter.Terdapat beberapa class-class: Filter Writer Classes BufferedWriter Menyediakan penyangga karakter bertujuan untuk menyediakan efisiensi penulisan karakter, array, dan garis. FilterWriter Untuk menulis stream karakter yang difilter. OutputStreamWriter Mengkodekan karakter yang ditulis ke dalam byte. PrintWriter Mencetak representasi yang diformat dari object ke dala stream text-output. Table 1.4.3: Filter Writer classes 12.6 Contoh Dasar Reader/Writer Contoh penggantian menggunakan class FileReader dan FileWriter. Dalam contoh ini, program membaca dari file yang khusus oleh user dan mengkopi isi dari file ke file lain. import java.io.*; class CopyFile { void copy(String input, String output) { FileReader reader; FileWriter writer; int data; try { reader = new FileReader(input); writer = new FileWriter(output); while ((data = reader.read()) != -1) { writer.write(data); } reader.close(); writer.close(); } catch (IOException ie) { ie.printStackTrace(); } Pengenalan Pemrograman 2 8
  • 9. J.E.N.I. } public static void main(String args[]) { String inputFile = args[0]; String outputFile = args[1]; CopyFile cf = new CopyFile(); cf.copy(inputFile, outputFile); } } Cobalah program tersebut sendiri dan amatilah apa ang terjadi pada file yang dimanipulasi. 12.7 Merubah Contoh Reader/Writer Contoh pengganti hampir sama dengan contoh sebelumnya tetapi lebih efisien. Walaupun membaca dan menulis ke stream sekali saja, karakter membaca yang pertama disimpan dalam buffer sebelum penulisan karakter baris per baris. Program menggunakan teknik dari perangkaian stream dimana clas FileReader dan FileWriter didekorasi dengan class BufferedReader dan BufferedWriter, berurutan. import java.io.*; class CopyFile { void copy(String input, String output) { BufferedReader reader; BufferedWriter writer; String data; try { reader = new BufferedReader(new FileReader(input)); writer = new BufferedWriter(new FileWriter(output)); while ((data = reader.readLine()) != null) { writer.write(data, 0, data.length()); } reader.close(); writer.close(); } catch (IOException ie) { ie.printStackTrace(); } } public static void main(String args[]) { String inputFile = args[0]; String outputFile = args[1]; CopyFile cf = new CopyFile(); cf.copy(inputFile, outputFile); } } Bandingkan kode ini dengan sebelumnya. Apakah hasil dari menjalankan program ini? Pengenalan Pemrograman 2 9
  • 10. J.E.N.I. 12.8 Class InputStream Bagian ini memberikan gambaran perbedaan stream byte yang digunakan membaca. 12.8.1 Method InputStream Class InputStream terdiri atas beberapa method untuk membaca byte. Beberapa method class: Method InputStream public int read(-) throws IOException Method overloaded, juga memiliki tiga versi seperti class Reader tersebut. public abstract int read() - Membaca byte selanjutnya dari data dari stream ini. public int read(byte[] bBuf)- Membaca sejumlah byte dan menyimpannya dalam byta array bBuf. public abstract int read(char[] cbuf, int offset, int length)- Membaca panjang sejumlah length byte dan menyimpannya dalam array byte bBuf dimulai dari offset tertentu. public abstract void close() throws IOException Menutup stream in. Memanggil method InputStream yang lain setelah menutup streamnya akan menyebabkan sebuah IOException dijalankan. public void mark(int readAheadLimit) throws IOException Menandai posisi tertentu dalam stream. Setelah menandainya, panggil untuk menjalankan fungsi reset() akan mencoba untuk mengatur posisi streamnya pada titik tertentu kembali. Tidak semua stream input-byte mendukung operasi ini. public boolean markSupported() Mengindikasikan apakah suatu stream mendukung operasi pemberian tanda (mark) dan reset. Yang tidak didukung secara default. Seharusnya diubah menjadi overide oleh subclass. public void reset() throws IOException Merubah posisi stream pada posisi akhir yang diberi tanda (mark) Table 1.7.1: Method InputStream 12.8.2 Class-Class Node InputStream Berikut ini merupakan beberapaclass-class dasar InputStream : Class-class Node InputStream FileInputStream Untuk membaca baris byte dari sebuah file BufferedArrayInputStream Pengenalan Pemrograman 2 10
  • 11. J.E.N.I. Class-class Node InputStream Mengimplementasikan sebua penimpan sementara yang terdiri atas data byte, yang mungkin dpat dibaca dari streamnya. PipedInputStream Seharusnya terhubung ke sebuah PipedOutputStream. Stream ini secara khusus digunakan oleh dua urutan yang didalamnya satu dari urutan tersebut membaca data dari sumber ini sementara urutan yang lain menulis ke PipedOutputStream tujuan. Table 1.7.2: class-class Node InputStream 12.8.3 Class-class Filter InputStream Untuk menambah fungsi ke class dasar InputStream, Anda dapat menggunakan class stream filter. Berikut ini adalah beberapa dari class-class tersebut : Class-class Filter InputStream BufferedInputStream Sebuah subclass dari FilterInputStream yang memungkinkan penyimpanan input sementara untuk menyediakan pembacaan byte yang lebih efisien. FilterInputStream Untuk membaca byte stream yang telah terfilter, yang mungkin memindahkan source dasar dari data sepanjang proses dan menyediakan fungsi tambahan. ObjectInputStream Digunakan untuk serialisasi object. Deserialisasi object dan data primitif yang telah tertulis sebelumnya menggunakan sebuahObjectOutputStream. DataInputStream Sebuah subclass dari FilterInputStream yang memerintahkan sebuah aplikasi membaca data primitif Java dari sebuah input stream dasar dalam sebuah Mesin yang berjalan secara bebas(machine-independent way). LineNumberInputStream Sebuah subclass FilterInputStream yang memungkinkan pemeriksaan posisi dari nomor baris tertentu. PushbackInputStream Sebuah subclass dari class FilterInputStream yang memungkinkan byte diproses balik atau tidak dibaca ke bentuk sreamnya. Table 1.7.3: Class-class Filter InputStream Pengenalan Pemrograman 2 11
  • 12. J.E.N.I. 12.9 Class-Class OutputStream Pada pembahasan ini memberikan sebuah pandangan tentang byte stream yang berbeda yang digunakan dalam proses penulisan. 12.9.1 Method OutputStream Class OutputStream terdiri atas beberapa method untuk menulis data byte. Berikut ini adalah beberapa dari class methodnya : Method OutputStream public void write(-) throws IOException Sebuah method overloaded untuk menulis bentuk byte ke bentuk stream. Ada tiga versi : public abstract void write(int b) – Menulis nilai byte khusus b ke bentuk output stream nya. public void write(byte[] bBuf) – Menulis isi dari array byte bBuf ke bentuk stream nya. public void write(byte[] bBuf, int offset, int length) – Menulis sejumlah length byte dari array bBuf ke bentuk streamnya, dimulai pada offset khusus ke streamnya. public abstract void close() throws IOException Menutup stream ini dan mengeluarkan beberapa sumber dari sistem digabungkan dengan streamnya. Penggunaan method lain setelah memanggil method ini akan menyebabkan sebuahIOException dijalankan. public abstract void flush() Mengganti stream (sebagai contoh, data byte tersimpan dalam buffer akan segera ditulis dalam tujuan yang diamksud). Table 1.8.1: Method OutputStream 12.9.2 Class-Class Node OutputStream Berikut ini adalah beberapa dari class dasar OutputStream : Clas-class Node OutputStream FileOutputStream Untuk menulis byte ke sebuah file. BufferedArrayOutputStream Mengimplementasikan sebuah penyimpan sementara berupa byte, yang mana mungkin akan dituliskan ke bentuk streamnya. PipedOutputStream Pengenalan Pemrograman 2 12
  • 13. J.E.N.I. Clas-class Node OutputStream Seharusnya tersambung ke sebuah PipedInputStream. Stream ini secara khusus digunakan oleh dua urutan dimana didalamnya satu dari urutan tersebut menulis data ke bentuk streamnya sementara urutan yang lain membaca dari PipedInputStream tujuan. Table 1.8.2: Class-class Node OutputStream 12.9.3 Class-Class Filter OutputStream Untuk menambah fungsi ke class dasar OutputStream, Anda dapat menggunakan class stream filter.berikut ini beberapa dari class tersebut : Class-Class Filter OutputStream BufferedOutputStream Sebuah subclass dari FilterOutputStream yang memungkinkan penyimpanan output sementara untuk proses penulisan byte yang lebih efisien. Memungkinkan penulisan byte ke bentuk dasar output stream tanpa menyebabkan diperlukannya pemanggilan dasar sistem untuk setiap penulisan byte. FilterOutputStream Untuk menulis stream byte yang telah difilter, yang mana mungkin dipindahkan ke source dasar dari data sepanjang proses dan menyediakan fungsi tambahan. ObjectOutputStream Digunakan untuk serialisasi object. Serialisasi object dan data primitif untuk sebuah OutputStream. DataOutputStream Sebuah subclass dari FilterOutputStream yang menjalankan aplikasi penulisan data primitif ke output stream dasar ke dalam sebuah mesin yang bebas berjalan (machine- independent way). PrintStream Sebuah subclass dari FilterOutputStream yang menyediakan kemampuan untuk mencetak representasi dari nilai data yang bermacam-macam dengan tepat. Table 1.8.3: Class-Class Filter OutputStream Pengenalan Pemrograman 2 13
  • 14. J.E.N.I. 12.10 Contoh Dasar InputStream/OutputStream Contoh berikut ini menggunakan class FileInputStream dan FileOutputStream untuk membaca dari sebuah file khusus dan mengcopy isi dari file ini ke file yang lain. import java.io.*; class CopyFile { void copy(String input, String output) { FileInputStream inputStr; FileOutputStream outputStr; int data; try { inputStr = new FileInputStream(input); outputStr = new FileOutputStream(output); while ((data = inputStr.read()) != -1) { outputStr.write(data); } inputStr.close(); outputStr.close(); } catch (IOException ie) { ie.printStackTrace(); } } public static void main(String args[]) { String inputFile = args[0]; String outputFile = args[1]; CopyFile cf = new CopyFile(); cf.copy(inputFile, outputFile); } } Pengenalan Pemrograman 2 14
  • 15. J.E.N.I. 12.11 Contoh Modifikasi InputStream/OutputStream Contoh berikutnya menggunakan class PushbackInputStream yang memanfaatkan sebuah object FileInputStream dan class PrintStream. import java.io.*; class CopyFile { void copy(String input) { PushbackInputStream inputStr; PrintStream outputStr; int data; try { inputStr = new PushbackInputStream(new FileInputStream(input)); outputStr = new PrintStream(System.out); while ((data = inputStr.read()) != -1) { outputStr.println("read data: " + (char) data); inputStr.unread(data); data = inputStr.read(); outputStr.println("unread data: " + (char) data); } inputStr.close(); outputStr.close(); } catch (IOException ie) { ie.printStackTrace(); } } public static void main(String args[]) { String inputFile = args[0]; CopyFile cf = new CopyFile(); cf.copy(inputFile); } } Uji kode ini pada sebuah file yang mengandung sedikit baris atau karakter. Pengenalan Pemrograman 2 15
  • 16. J.E.N.I. 12.12 Serialisasi Java Virtual Machine (JVM) mendukung kemampuan untuk membaca atau menulis sebuah object ke bentuk stream. kemampuan ini disebut dengan serialisasi, proses "flattening" sebuah object sehingga data tersebut dapat disimpan ke beberapa penyimpanan permanen atau dilewatkan ke object lain melalui class OutputStream. Ketika menulis sebuah object, ini merupakan hal yang penting bahwa keadaan tersebut sudah tertulis dan telah diserialisasi dari setiap objectnya dapat dibangun kembali sebagaimana dtaa tersebut dibaca. Menyimpan sebuah objectke beberapa tipe penyimpanan permanen yang dikenal sebagai persistence. Stream yang digunakan untuk deserialisasi dan serialisasi secara berurutan adalah class ObjectInputStream dan ObjectOutputStream . Untuk memungkinkan sebuah object diserialisasi (sebagai contoh dapat disimpan dan diurutkan), Class tersebut harus mengimplementasikan interface yang dapat diserialisasi. Class ini seharusnya juga menyediakan default constructor atau sebuah constructor tanpa argumen. Satu hal yang baik mengenai kemampuan untuk melakukan serialisasiyang dapat diturunkan, yang berarti kita tidak memiliki implementasi serialisasi pada setiap class. Ini berarti mengurangi pekrjaan untuk programmer. Anda hanya dapat mengimplementasikan serialisasi sekali sepanjang hirarki class. 12.12.1 Kata Kunci transient Ketika suatu object diserialisasi, tempat hanya disediakan untuk data object. Method dan Constructor bukan merupakan bagian dari stream serialisasi. Ada beberapa object yang tidak diserialisasi kaena data yang diwakilinya berubah secara konstan. Beberapa contoh dari setiap object adalah object FileInputStream dan Object Thread. Sebuah NotSerializableException dijalankan jika operasi serialisasi gagal karena beberapa alasan. Jangan berputus asa. Sebuah class yang mengandung object yang tidak diserialisasi dapat tetap diserialisasi jika penunjuk ke object non-serialisasi ditandai dengan katakunci transient. Pertimbangkan contoh berikut ini : class MyClass implements Serializable { transient Thread thread; //try removing transient int data; /* beberapa data yang lain*/ } Kata kunci transient mencagah data dari proses serialisasi. Object instantiasi dari class ini sekarang dapat ditulis ke sebuah OutputStream. 12.12.2 Serialisasi: Menulis Suatu Object Stream Untuk menulis object ke sebuah stream, Anda perlu menggunakan classObjectOutputStream class dan methodnya yaitu method writeObject. Method writeObject memiliki tanda sebagai berikut : public final void writeObject(Object obj) throws IOException dimana obj adalah object yang ditulis ke stream. Pengenalan Pemrograman 2 16
  • 17. J.E.N.I. Contoh dibawah ini menuliskan sebuah object Boolean ke sebuah ObjectOutputStream. Class Boolean mengimplementasikan interface yang dapat di Serialisasi. Selanjutnya, Instantiasi object dari class ini dapat ditulis ke dan dibaca dari sebuah stream. import java.io.*; public class SerializeBoolean { SerializeBoolean() { Boolean booleanData = new Boolean("true"); try { FileOutputStream fos = new FileOutputStream("boolean.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(booleanData); oos.close(); } catch (IOException ie) { ie.printStackTrace(); } } public static void main(String args[]) { SerializeBoolean sb = new SerializeBoolean(); } } 12.12.3 Deserialisasi: Membaca Sebuah Object Stream Untuk membaca sebuah object dari sebuah stream, Anda perlu menggunakan class ObjectInputStream dan methodnya yaitu method readObject. Method readObject memiliki tanda sebagai berikut : public final Object readObject() throws IOException, ClassNotFoundException dimana obj adalah object yang dibaca dari stream. tipe Object dikembalikan harus melalui proses typecast ke nama class yang sesuai sebelum method pada class tersebut dapat dieksekusi. Contoh dibawah ini membaca sebuah object Boolean dari sebuah ObjectInputStream. Ini merupakan kesinambungan dari contoh sebelumnya pada serialisasi. import java.io.*; public class UnserializeBoolean { UnserializeBoolean() { Boolean booleanData = null; try { FileInputStream fis = new FileInputStream("boolean.ser"); ObjectInputStream ois = new ObjectInputStream(fis); booleanData = (Boolean) ois.readObject(); ois.close(); } catch (Exception e) { e.printStackTrace(); Pengenalan Pemrograman 2 17
  • 18. J.E.N.I. } System.out.println("Unserialized Boolean from " + "boolean.ser"); System.out.println("Boolean data: " + booleanData); System.out.println("Compare data with true: " + booleanData.equals(new Boolean("true"))); } public static void main(String args[]) { UnserializeBoolean usb = new UnserializeBoolean(); } } 12.13 Latihan 12.13.1 Enkripsi Sederhana Baca dari sebuah file khusus oleh user dan encrypt isi file menggunakan teknik penggeseran yang sederhana. Juga, tanyakan pada user untuk menginput ukuran pergeseran. Output dari pesan yang telah di encrypt pada file yang lain yang memiliki nama yang juga dibuat oleh user sendiri. Sebagai contoh, Ukuran pergeseran: 1 Pesan yang dibaca dari file: Hello Pesan ter-encrypt: Ifmmp Pengenalan Pemrograman 2 18