"Hello, Amigo! Saya ingin menambah sedikit apa yang Ellie beritahu awak."

Kadangkala anda perlu mengawal proses bersiri. Berikut adalah beberapa sebab mengapa:

1) Objek tidak bersedia untuk bersiri : keadaan dalaman semasa sedang dalam proses perubahan.

2) Objek mengandungi objek yang tidak boleh disiri, tetapi boleh menukarnya kepada bentuk yang boleh disiri dengan mudah , cth simpannya sebagai tatasusunan bait atau sesuatu yang lain.

3) Objek ingin menyahsiri semua datanya sebagai satu unit dan/atau menyulitkannya sebelum bersiri.

Terdapat banyak sebab mengapa anda mungkin mahu melakukan penyiaran secara manual. Tetapi kami tidak mahu kehilangan semua kelebihan yang ditawarkan oleh siri standard. Lagipun, objek kita mungkin menggunakan objek lain. Tetapi mereka tidak boleh bersiri jika objek kami tidak menyokong bersiri.

Keadaan ini juga mempunyai penyelesaian: antara muka Externalizable . Kita mesti berterima kasih kepada pencipta berwawasan Java. Hanya gantikan antara muka Serializable dengan antara muka Externalizable , dan kelas anda boleh mengurus proses bersiri secara manual.

Antara muka Externalizable mempunyai dua kaedah, yang mana antara muka Serializable tidak, yang dipanggil oleh mesin Java apabila objek bersiri. Begini rupanya:

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

Ingatkan anda tentang apa-apa?

"Holy moly! Beginilah cara kami cuba menyelamatkan objek sebelum kami mempertimbangkan untuk bersiri."

"Ini menjadikan segala-galanya mudah: jika serialisasi standard adalah mencukupi, kami hanya mewarisi antara muka Serializable . Jika ia tidak mencukupi, maka kami mewarisi Externalizable dan menulis kod kami sendiri untuk menyimpan/memuatkan objek kami."

"Tetapi adakah kelas yang ditanda Externalizable dianggap boleh bersiri? Bolehkah kami menggunakan kelas sedemikian untuk "selamat" menyimpan rujukan kepada kelas boleh bersiri kami?"

"Ya. Jika kelas melaksanakan Serializable atau Externalizable , ia dianggap boleh bersiri."

"Ia adalah penyelesaian yang sempurna. Saya sukakannya."

"Saya gembira mendengarnya. Tetapi ada lebih daripada itu... Anda harus bertanya kepada Profesor Hans tentang semua nuansa. Ia sememangnya wujud. Dia ingin memberi anda sesuatu untuk dibaca."