Stream, Reader, dan Writer 3

22.38 viia 0 Comments

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


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


**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.
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();
}
}
** 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();
}
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();
}
}

diambil dari : modul JENI-Intro2-Bab12-Stream IO Lanjut.pdf

0 komentar: