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