Serialization
Serialization melibatkan state dari objek yang sedang disimpan ke sebuah stream dan mengembalikan objek yang sama dari stream tersebut. Stream berfungsi sebagai container bagi objek. Sumber lain mengatakan Serialization dari sebuah objek adalah proses penyimpanan dari state objek menjadi rangkaian rangkaian bytes, dan juga proses membangun kembali byte2 tersebut menjadi objek yang hidup dalam beberapa waktu kedepan. Java Serialization API menyediakan suatu mekanisme standart utk para developer agar dapat menghandle serialization dari suatu objek. API itu kecil dan mudah menggunakannya, dapat dimengerti karena menyediakan klas2 dan metod2.
Suatu object yang dapat disimpan dan dibuat lagi (persist) harus dibuat
menjadi persistance object. Sebuah objek yang ditandai serializable dengan mengimplementasikan java.io.Serializable interface. Contoh sebuah persisten class yang akan kita gunakan utk mendemonstrasikan mekanisme serialization:
10 import java.io.Serializable;
20 import java.util.Date;
30 import java.util.Calendar;
40 public class PersistentTime
implements Serializable
50 {
60 private Date time;
70
80 public PersistentTime()
90 {
100 time = Calendar.getInstance().getTime();
110 }
120
130 public Date getTime()
140 {
150 return time;
160 }
170 }
Rule #1 : Objek yang ingin terus eksist (persisted) harus mengimplementasikan Serializable interface atau mewarisi pengimplementasian itu dari hirarki objek itu sendiri. Step berikutnya adalah bener2 membuat objek itu persist.
Liat kode berikut digunakan utk menyimpan objek PersistentTime:
10 import java.io.ObjectOutputStream;
20 import java.io.FileOutputStream;
30 import java.io.IOException;
40 public class FlattenTime
50 {
60 public static void main(String [] args)
70 {
80 String filename = "time.ser";
90 if(args.length > 0)
100 {
110 filename = args[0];
120 }
130 PersistentTime time = new PersistentTime();
140 FileOutputStream fos = null;
150 ObjectOutputStream out = null;
160 try
170 {
180 fos = new FileOutputStream(filename);
190 out = new ObjectOutputStream(fos);
200 out.writeObject(time);
210 out.close();
220 }
230 catch(IOException ex)
240 {
250 ex.printStackTrace();
260 }
270 }
280 }
Tugas nyata yang terjadi adalah pada baris ke 200 ketika kita memanggil metod ObjectOutputStream.writeObject(), yang mana memulai mekanisme serialization dan objek itu diratakan/dipaparkan.
Untuk mengembalikan file tersebut, kita dapat menggunakan kode sbb:
10 import java.io.ObjectInputStream;
20 import java.io.FileInputStream;
30 import java.io.IOException;
40 import java.util.Calendar;
50 public class InflateTime
60 {
70 public static void main(String [] args)
80 {
90 String filename = "time.ser";
100 if(args.length > 0)
110 {
120 filename = args[0];
130 }
140 PersistentTime time = null;
150 FileInputStream fis = null;
160 ObjectInputStream in = null;
170 try
180 {
190 fis = new FileInputStream(filename);
200 in = new ObjectInputStream(fis);
210 time = (PersistentTime)in.readObject();
220 in.close();
230 }
240 catch(IOException ex)
250 {
260 ex.printStackTrace();
270 }
280 catch(ClassNotFoundException ex)
290 {
300 ex.printStackTrace();
310 }
320 // print out restored time
330 System.out.println("Flattened time: " + time.getTime());
340 System.out.println();
350 // print out the current time
360 System.out.println("Current time: " + Calendar.getInstance().getTime());
370 }
380}
Pada kode di atas, pengembalian objek terjadi pada baris ke 210 dengan memanggil metod
ObjectInputStream.readObject () .