"สวัสดี Amigo! ฉันต้องการเพิ่มสิ่งที่ Ellie บอกคุณเล็กน้อย"

บางครั้งคุณต้องควบคุมกระบวนการทำให้เป็นอนุกรม นี่คือเหตุผลบางประการ:

1) วัตถุไม่พร้อมสำหรับการทำให้เป็นอนุกรม : สถานะภายในปัจจุบันอยู่ในกระบวนการเปลี่ยนแปลง

2) วัตถุมีวัตถุที่ไม่สามารถทำให้เป็นอนุกรมได้ แต่สามารถแปลงให้เป็นรูปแบบที่สามารถทำให้เป็นอนุกรมได้ง่ายเช่น บันทึกเป็นอาร์เรย์ไบต์หรืออย่างอื่น

3) อ็อบเจกต์ต้องการ deserialize ข้อมูลทั้งหมดเป็นหน่วยเดียว และ/หรือเข้ารหัสก่อนการซีเรียลไลเซชัน

มีเหตุผลหลายประการที่คุณอาจต้องการทำซีเรียลไลเซชันด้วยตนเอง แต่เราไม่ต้องการสูญเสียข้อดีทั้งหมดที่การทำให้เป็นอันดับมาตรฐานมีให้ ท้ายที่สุด วัตถุของเราอาจใช้วัตถุอื่น แต่ไม่สามารถทำให้เป็นอนุกรมได้หากวัตถุของเราไม่รองรับการทำให้เป็นอนุกรม

สถานการณ์นี้มีวิธีแก้ไขเช่นกัน: อินเตอร์เฟสที่ปรับแต่งภายนอกได้ เราต้องขอบคุณผู้สร้างที่มีวิสัยทัศน์ของ Java เพียงแทนที่ อินเทอร์เฟซ Serializableด้วย อินเทอร์เฟซ Externalizableและชั้นเรียนของคุณสามารถจัดการกระบวนการทำให้เป็นอันดับได้ด้วยตนเอง

อินเตอร์เฟสExternalizableมีสองเมธอด ซึ่ง อินเตอร์เฟส Serializableไม่มี ซึ่งเรียกโดยเครื่อง Java เมื่ออ็อบเจ็กต์ถูกทำให้เป็นอนุกรม นี่คือลักษณะ:

รหัส
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();
 }
}

เตือนคุณถึงอะไร?

"Holy moly! นี่คือวิธีที่เราพยายามบันทึกวัตถุก่อนที่เราจะพิจารณาการทำให้เป็นอนุกรม"

"สิ่งนี้ทำให้ทุกอย่างง่ายขึ้น: หากการทำให้เป็นอนุกรมมาตรฐานเพียงพอ เราก็แค่สืบทอดอินเทอร์เฟซที่ทำให้เป็นอนุกรมได้ หากยังไม่เพียงพอ เราจะสืบทอดความสามารถภายนอกและเขียนโค้ดของเราเองเพื่อบันทึก/โหลดอ็อบเจกต์ของเรา"

"แต่คลาสที่มีเครื่องหมายExternalizableถือว่าเป็นซีเรียลไลซ์ได้หรือไม่ เราสามารถใช้คลาสดังกล่าวเพื่อจัดเก็บการอ้างอิงไปยังคลาสซีเรียลไลซ์ของเราได้ "อย่างปลอดภัย" หรือไม่

"ใช่ ถ้าคลาสใช้SerializableหรือExternalizableจะถือว่า Serializable"

"มันเป็นโซลูชั่นที่สมบูรณ์แบบ ฉันชอบมัน"

"ฉันดีใจที่ได้ยินเช่นนั้น แต่มีมากกว่านั้น... คุณควรถามศาสตราจารย์ฮันส์เกี่ยวกับความแตกต่างทั้งหมด มันมีอยู่จริง เขาอยากจะให้อะไรคุณอ่าน"