"Halo, Amigo! Aku ingin menambahkan sedikit pada apa yang Ellie ceritakan padamu."

Terkadang Anda perlu mengontrol proses serialisasi. Berikut adalah beberapa alasan mengapa:

1) Objek tidak siap untuk serialisasi : kondisi internal saat ini sedang dalam proses perubahan.

2) Sebuah objek berisi objek non-serializable, tetapi dapat mengubahnya menjadi bentuk yang dapat dengan mudah diserialkan , misalnya menyimpannya sebagai array byte atau yang lainnya.

3) Suatu objek ingin membatalkan serialisasi semua datanya sebagai satu unit dan/atau mengenkripsinya sebelum serialisasi.

Ada banyak alasan mengapa Anda mungkin ingin melakukan serialisasi secara manual. Namun kami tidak ingin kehilangan semua keuntungan yang ditawarkan serialisasi standar. Lagi pula, objek kita mungkin menggunakan objek lain. Tapi mereka tidak bisa diserialkan jika objek kita tidak mendukung serialisasi.

Situasi ini juga memiliki solusi: antarmuka Externalizable . Kita harus berterima kasih kepada pencipta visioner Jawa. Cukup ganti antarmuka Serializable dengan antarmuka Externalizable , dan kelas Anda dapat mengelola proses serialisasi secara manual.

Antarmuka Externalizable memiliki dua metode, yang tidak dimiliki oleh antarmuka Serializable , yang dipanggil oleh mesin Java ketika sebuah objek diserialisasi. Begini tampilannya:

Kode
class Cat implements Externalizable
{
 public String name;
 public int age;
 public int weight;

 public void writeExternal(ObjectOutput out)
 {
  out.writeObject(name);
  out.writeInt(age);
  out.writeInt(weight);
}

 public void readExternal(ObjectInput in)
 {
  name = (String) in.readObject();
  age = in.readInt();
  weight = in.readInt();
 }
}

Mengingatkan Anda pada sesuatu?

"Holy moly! Persis seperti inilah cara kami mencoba menyelamatkan objek sebelum kami mempertimbangkan serialisasi."

"Ini membuat semuanya sederhana: jika serialisasi standar memadai, kami hanya mewarisi antarmuka Serializable . Jika tidak memadai, maka kami mewarisi Externalizable dan menulis kode kami sendiri untuk menyimpan/memuat objek kami."

"Tapi apakah kelas bertanda Externalizable dianggap serializable? Bisakah kita menggunakan kelas seperti itu untuk "dengan aman" menyimpan referensi ke kelas serializable kita?"

"Ya. Jika suatu kelas mengimplementasikan Serializable atau Externalizable , itu dianggap serializable."

"Ini solusi sempurna. Saya menyukainya."

"Aku senang mendengarnya. Tapi ada lagi... Kau harus bertanya pada Profesor Hans tentang semua nuansanya. Mereka pasti ada. Dia ingin memberimu sesuatu untuk dibaca."