Computer >> Máy Tính >  >> Lập trình >> Java

Sự khác biệt giữa tuần tự hóa và ngoại hóa trong Java

Tuần tự hóa và ngoại hóa đều là quá trình chuyển đổi một đối tượng thành luồng byte và lưu trữ luồng byte trong cơ sở dữ liệu hoặc bộ nhớ. Lớp triển khai giao diện java.io.Serializable có thể được tuần tự hóa. Mặt khác, ngoại hóa được sử dụng để tuần tự hóa tùy chỉnh dựa trên yêu cầu trong ứng dụng. Tính năng bên ngoài mở rộng java.io.Serializable.

Sr. Không. Phím Sê-ri hóa Bên ngoài
1
Giao diện
Serialization là một giao diện đánh dấu
Ngoại hóa chứa hai phương thức readExternal và writeExternal.
2
Lôgic triển khai
Lớp đang triển khai giao diện này trao trách nhiệm cho JVM để tuần tự hóa hoặc duy trì đối tượng java. JVM sử dụng readObject và writeObject để tuần tự hóa
Ngoại hóa cung cấp điều khiển logic triển khai cho ứng dụng bằng cách ghi đè các phương thức readExternal và writeExternal.
3
Cách bỏ qua các biến
Trong tuần tự hóa, JVM bỏ qua biến tạm thời trong quá trình tuần tự hóa và giải mã hóa đối tượng java
Lập trình viên có thể viết logic của riêng họ để bỏ qua một số biến trong quá trình bên ngoài đối tượng java
4
Hiệu suất
Trong giao diện có thể tuần tự hóa sử dụng phản xạ gây ra hiệu suất tương đối chậm.
Có thể ngoại hóa cung cấp toàn quyền kiểm soát đối với phương pháp triển khai.
5
Tuần tự hóa đối tượng có kế thừa
1. Nếu lớp cha không thể tuần tự hóa thì lớp con vẫn có thể được tuần tự hóa.
2. Nếu một lớp con không được tuần tự hóa nhưng lớp cha có thể tự động tuần tự hóa
Chúng tôi cũng có thể áp dụng điều này cho khả năng bên ngoài.

Ví dụ về Có thể tùy chỉnh bên ngoài

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

Ví dụ về Serializable

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