Serialization trong java
Serialization trong java
Serialization trong java
Lớp ObjectOutputStream trong java
Nội dung chính
- 1. Serialization trong java
- java.io.Serializable interface
- 2. Deserialization trong java
- 3. Java Serialization với thừa kế (Mối quan hệ IS-A)
- 4. Java Serialization với sự kết hợp (Mối quan hệ HAS-A)
- 5. Java Serialization với thành viên dữ liệu static
- 6. Java Serialization với array hoặc collection
- 7. Externalizable trong java
- 8. Từ khóa transient trong java
1. Serialization trong java
Tuần tự hoá trong java hay serialization trong java là một cơ chế để ghi trạng thái của một đối tượng vào một byte stream.
Nó chủ yếu được sử dụng trong các công nghệ Hibernate, RMI, JPA, EJB và JMS.
Hoạt động ngược lại của serialization được gọi là deserialization.
Ưu điểm của Serialization trong java
Nó chủ yếu được sử dụng để truyền trạng thái của đối tượng qua mạng (được biết đến như marshaling).
java.io.Serializable interface
Serializable là một giao diện đánh dấu (không có thành viên dữ liệu và phương thức). Nó được sử dụng để "đánh dấu" các lớp java để các đối tượng của các lớp này có thể nhận được khả năng nhất định. Cloneable và Remote cũng là những interface đánh dấu.
Nó phải được implements bởi lớp mà đối tượng của nó bạn muốn persist, bạn có thể xem thêm về đối tượng persistent là gì?
Lớp String và tất cả các lớp wrapper implements giao tiếp java.io.Serializable theo mặc định.
Hãy xem ví dụ dưới đây:
|
Trong ví dụ trên, lớp Student implements giao tiếp Serializable. Bây giờ các đối tượng của nó có thể được chuyển đổi thành stream.
Tìm hiểu bài học về lớp ObjectOutputStream trong java để hiểu rõ hơn về serialization trong java.
2. Deserialization trong java
Deserialization là quá trình tái thiết lại các đối tượng từ trạng thái serialized.Đây là hoạt động ngược lại của serialization.
Tìm hiểu bài học về lớp ObjectInputStream trong java để hiểu rõ hơn về serialization trong java.
3. Java Serialization với thừa kế (Mối quan hệ IS-A)
Nếu một lớp implements giao tiếp Serializable thì tất cả các lớp con của nó cũng sẽ được serializable. Hãy xem ví dụ dưới đây:
|
|
Các bạn hãy thực hành ghi và đọc với lớp ObjectOutputStream trong java và lớp ObjectInputStream trong java về Java Serialization với thừa kế nhé.
4. Java Serialization với sự kết hợp (Mối quan hệ HAS-A)
Nếu một lớp có một tham chiếu của một lớp khác, tất cả các tham chiếu phải được implements giao tiếp Serializable nếu không quá trình serialization sẽ không được thực hiện. Trong trường hợp đó, NotSerializableException được ném ra khi chạy.
|
|
Vì Address không implements giao tiếp Serializable nên bạn không thể serialize thể hiện của lớp Student.
Lưu ý: Tất cả các đối tượng trong một đối tượng phải được impements giao tiếp Serializable.
Các bạn hãy thực hành ghi và đọc với lớp ObjectOutputStream trong java và lớp ObjectInputStream trong java về Java Serialization với sự kết hợp nhé.
5. Java Serialization với thành viên dữ liệu static
Nếu có bất kỳ thành viên dữ liệu static trong một lớp, nó sẽ không được serialized bởi vì static là một phần của lớp chứ không phải đối tượng.
|
6. Java Serialization với array hoặc collection
Quy tắc: Trong trường hợp mảng hoặc bộ sưu tập, tất cả các đối tượng củaarray hoặc collection phải được tuần tự hóa. Nếu bất kỳ đối tượng không phải là serialiizable, serialization sẽ không thành công.
7. Externalizable trong java
Giao tiếp Externalizable cung cấp khả năng viết trạng thái của một đối tượng vào một byte stream ở định dạng nén. Nó không phải là một giao diện đánh dấu.
Giao tiếp Externalizable cung cấp hai phương thức:
- public void writeExternal(ObjectOutput out) throws IOException
- public void readExternal(ObjectInput in) throws IOException
8. Từ khóa transient trong java
Nếu bạn không muốn serialize bất kỳ thành viên dữ liệu của một lớp học, bạn có thể đánh dấu nó với từ khóa transient