"คุณจะจำได้ว่าวันนี้เราตรวจสอบการบันทึกวัตถุและอ่านจากไฟล์หรือไม่"

"ใช่ เราเพิ่งบันทึกไปยังเอาต์พุตสตรีม อ่านจากสตรีมอินพุต"

"ทำได้ดีมาก Amigo ดีใจที่ได้ยินว่าคุณสังเกตเห็นรายละเอียดเหล่านี้ คุณจะสามารถกรอกโค้ดให้สมบูรณ์เพื่อบันทึกและอ่านจากไฟล์ได้หรือไม่"

"ทำอะไรให้เสร็จ! ประกาศ FileInputStream และ FileOutputStream แล้วส่งต่อไปยังวิธีการบันทึกและโหลด ไม่มีอะไรต้องสับสนเกี่ยวกับที่นี่ ง่ายมาก"

"ฉันดีใจแทนคุณ ตอนนี้สำหรับหัวข้อใหม่: การทำให้เป็นอนุกรม "

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

เราเพียงแค่นำวัตถุนั้นไปบันทึกลงในสตรีมและอ่านจากสตรีม:

รหัส
public static void main(String[] args) throws Exception
{
 Cat cat = new Cat();

 //Save a cat to file
 FileOutputStream fileOutput = new FileOutputStream("cat.dat");
 ObjectOutputStream outputStream = new ObjectOutputStream(fileOutput);
 outputStream.writeObject(cat);
 fileOutput.close();
 outputStream.close();

 //Load a cat from file
 FileInputStream fiStream = new FileInputStream("cat.dat");
 ObjectInputStream objectStream = new ObjectInputStream(fiStream);
 Object object = objectStream.readObject();
 fiStream.close();
 objectStream.close();

 Cat newCat = (Cat)object;
}

"แค่นั้นแหละ?"

"ถูกต้อง มี กลไกการ ทำซีเรียลไลเซชัน ขนาดใหญ่และซับซ้อนมาก ซึ่งช่วยให้เราบันทึกลงในสตรีมและอ่านจากสตรีมของข้อมูลเกือบทุกชนิด"

"เกือบทุกชนิด ดังนั้นไม่มีข้อมูลประเภทใดเลย"

"ใช่ ความจริงก็คือไม่ใช่ออบเจ็กต์ทั้งหมดที่มีความสามารถในการบันทึกโดยธรรมชาติออบเจ็กต์บางอย่างไม่เก็บข้อมูลทั้งหมดไว้ภายใน แต่จะอ้างอิงออบเจ็กต์และ/หรือแหล่งข้อมูลอื่นแทน ตัวอย่างเช่น คอนโซล (System. ใน) กระแสอินพุต (InputStream) และสิ่งอื่นๆ"

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

นี่คือตัวอย่าง «แมว» ที่รองรับการทำให้เป็นอันดับ:

รหัส
class Cat implements Serializable
{
 public String name;
 public int age;
 public int weight;
}

เมื่อเราพยายามทำให้เป็นอนุกรม (บันทึก) ออบเจกต์ เครื่อง Java จะตรวจสอบว่ารองรับการทำให้เป็นอนุกรมหรือไม่: ใช้อินเตอร์เฟส Serializable หรือไม่ ถ้าเป็นเช่นนั้นก็จะบันทึกวัตถุ ถ้าไม่เช่นนั้นจะเกิดข้อยกเว้นเพื่อระบุว่าการทำให้เป็นอันดับนั้นเป็นไปไม่ได้
ที่นี่คุณต้องเข้าใจว่าวัตถุที่ทำให้เป็นอนุกรมได้จะต้องประกอบด้วยวัตถุที่ทำให้เป็นอนุกรมได้เท่านั้น

"อืม ก็สมเหตุสมผลดี คุณไม่สามารถรักษาทั้งหมดได้หากไม่เก็บส่วนต่างๆ ของมัน"

"อย่างแน่นอน."

"แล้ว ints, Strings และ ArrayLists ล่ะ"

"พวกเขาทั้งหมดสนับสนุนการทำให้เป็นซีเรียลไลเซชัน ผู้สร้าง Java ใส่ใจเป็นพิเศษเพื่อให้แน่ใจว่าสิ่งนี้เกิดขึ้น ไม่น่าจะมีปัญหาใดๆ เกิดขึ้นที่นี่"

นอกจากนี้ ประเภทของวัตถุจะถูกบันทึกเมื่อวัตถุถูกทำให้เป็นอนุกรม ตอนนี้คุณสามารถบันทึกการอ้างอิงไปยังวัตถุ Cat ในตัวแปร Object ทุกอย่างจะทำให้เป็นซีเรียลไลซ์และดีซีเรียลไลซ์ได้

"ลดซีเรียลไลซ์?"

" การดีซีเรียลไลเซชันเป็นกระบวนการของการย้อนกลับซีเรียลไลเซชัน: การอ่านและสร้างออบเจกต์ใหม่จากสตรีม/ไฟล์"

“อ่า หมดคำถามแล้ว”