Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่าง Serialization และ Externalization ใน Java

ทั้ง Serialization และ Externalization เป็นกระบวนการแปลงอ็อบเจ็กต์เป็น byte stream และจัดเก็บ byte stream ในฐานข้อมูลหรือหน่วยความจำ คลาสที่ implements java.io.Serializable สามารถ serialize ได้ ส่วน Externalization ใช้สำหรับ custom serialization ตามความต้องการของแอปพลิเคชัน Externalization extends java.io.Serializable

ตารางเปรียบเทียบรายละเอียด

ลำดับ หัวข้อ Serialization Externalization
1 อินเทอร์เฟซ Serializable เป็น marker interface (ไม่มีเมธอด) Externalizable มีสองเมธอดคือ readExternal และ writeExternal
2 ตรรกะการนำไปใช้ คลาสที่ implement interface นี้มอบภาระให้ JVM จัดการ serialize/persist อ็อบเจ็กต์ JVM ใช้ readObject และ writeObject Externalizable ให้ความควบคุมตรรกะการนำไปใช้แก่แอปพลิเคชันโดยการ override readExternal และ writeExternal
3 วิธีการละเว้นตัวแปร JVM ข้าม transient variable ระหว่าง serialization และ deserialization โปรแกรมเมอร์เขียนตรรกะเองเพื่อละเว้นตัวแปรบางส่วนระหว่าง externalization
4 ประสิทธิภาพ Serializable ใช้ reflection ทำให้ประสิทธิภาพช้ากว่า Externalizable ให้ความควบคุมเต็มที่เหนือวิธีการนำไปใช้
5 การ serialize พร้อมการสืบทอด 1. ถ้า superclass ไม่ serializable subclass ยัง serialize ได้
2. ถ้า subclass ไม่ serialized แต่ superclass เป็น serializable จะ serialized อัตโนมัติ
สามารถนำไปใช้กับ externalizable ได้เช่นกัน

ตัวอย่าง Externalizable

class ExternalizableExample implements Externalizable {
    Integer id;
    
    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        out.writeInt(id);
    }
    
    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        this.id = in.readInt();
    }
}

ตัวอย่าง Serializable

class SerializableExample implements Serializable {
    private static final long serialVersionUID = 5081877L;
    String name;
}

สรุป

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