"Xin chào, Amigo! Tôi muốn thêm một chút vào những gì Ellie đã nói với bạn."

Đôi khi bạn cần kiểm soát quá trình lập số sê-ri. Dưới đây là một số lý do tại sao:

1) Một đối tượng chưa sẵn sàng để tuần tự hóa : trạng thái bên trong hiện tại của nó đang trong quá trình thay đổi.

2) Một đối tượng chứa các đối tượng không thể tuần tự hóa, nhưng có thể chuyển đổi chúng thành một dạng có thể dễ dàng được tuần tự hóa , ví dụ: lưu chúng dưới dạng mảng byte hoặc thứ gì đó khác.

3) Một đối tượng muốn giải tuần tự hóa tất cả dữ liệu của nó thành một đơn vị và/hoặc mã hóa nó trước khi tuần tự hóa.

Có nhiều lý do tại sao bạn có thể muốn thực hiện tuần tự hóa thủ công. Nhưng chúng tôi không muốn đánh mất tất cả những lợi thế mà việc lập số sê-ri tiêu chuẩn mang lại. Xét cho cùng, đối tượng của chúng ta có thể sử dụng các đối tượng khác. Nhưng chúng không thể được tuần tự hóa nếu đối tượng của chúng tôi không hỗ trợ tuần tự hóa.

Tình huống này cũng có một giải pháp: giao diện Externalizable . Chúng ta phải cảm ơn những người sáng tạo có tầm nhìn của Java. Chỉ cần thay thế giao diện Có thể tuần tự hóa bằng giao diện Có thể tuần tự hóa và lớp của bạn có thể quản lý quy trình tuần tự hóa theo cách thủ công.

Giao diện Externalizable có hai phương thức mà giao diện Serializable không có, được gọi bởi máy Java khi một đối tượng được tuần tự hóa. Cái này nó thì trông như thế nào:

Mã số
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();
 }
}

Nhắc nhở bạn về bất cứ điều gì?

"Chúa ơi! Đây chính xác là cách chúng tôi đã cố gắng lưu các đối tượng trước khi chúng tôi xem xét việc đăng nhiều kỳ."

"Điều này làm cho mọi thứ trở nên đơn giản: nếu khả năng tuần tự hóa tiêu chuẩn phù hợp, chúng tôi chỉ kế thừa giao diện Có thể tuần tự hóa . Nếu nó không phù hợp, thì chúng tôi sẽ kế thừa Bên ngoài hóa và viết mã của riêng mình để lưu/tải đối tượng của mình."

"Nhưng một lớp được đánh dấu là Có thể tuần tự hóa được coi là có thể tuần tự hóa được không? Chúng ta có thể sử dụng một lớp như vậy để lưu trữ "an toàn" các tham chiếu đến các lớp có thể tuần tự hóa của chúng ta không?"

"Có. Nếu một lớp triển khai Serializable hoặc Externalizable , nó được coi là có thể tuần tự hóa."

"Đó là giải pháp hoàn hảo. Tôi thích nó."

"Tôi rất vui khi nghe điều đó. Nhưng còn nhiều điều hơn thế nữa... Bạn nên hỏi Giáo sư Hans về tất cả các sắc thái. Chúng chắc chắn tồn tại. Ông ấy muốn đưa cho bạn thứ gì đó để đọc."