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.

Bạn đang xem: Serialization là gì

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).

*

Kết quả không có giá trị company, do thuộc tính này là static.

Xem thêm: Cocos2Dx Là Gì – Công Nghệ Làm Game Mobile: Cocos2D

Java Serialization với array hoặc collection

Trong trường hợp mảng (array) hoặc tập hợp (collection), tất cả các đối tượng của array hoặc collection phải được tuần tự hóa (Serializable). Nếu bất kỳ đối tượng không phải là serializable, thì quá trình serialization sẽ không thành công.

Externalizable trong java

Interface 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.

Interface Externalizable cung cấp hai phương thức:

public void writeExternal(ObjectOutput out) throws IOExceptionpublic void readExternal(ObjectInput in) throws IOException

Từ khóa transient trong java

Nếu không muốn serialize bất kỳ thuộc tính nào của một lớp, bạn có thể đánh dấu nó với từ khóa transient.

Xem thêm: Metabolic Syndrome Là Gì – Hội Chứng Chuyển Hóa Là Gì

Ví dụ, khai báo một lớp Student, có ba thành viên dữ liệu là id, name và age. Lớp Student implements giao tiếp Serializable, tất cả các giá trị sẽ được tuần tự nhưng nếu bạn không muốn tuần tự cho một giá trị, ví dụ: age thì bạn có thể khai báo age với từ khóa transient.

package com.thienmaonline.vn.serialize;import java.io.Serializable;public class Student implements Serializable {private static final long serialVersionUID = -266706354210367639L;private int id;private String name;private transient int age;public Student(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}
Overridepublic String toString() {return “Student “;}}Ví dụ sử dụng ObjectOutputStream để ghi đối tượng student vào file

package com.thienmaonline.vn.bytestream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;public class SerializationTransientExample {public static void main(String args) throws Exception {ObjectOutputStream oos = null;try {oos = new ObjectOutputStream(new FileOutputStream(“data/student.txt”));Student student = new Student(1, “thienmaonline.vn”, 28);oos.writeObject(student);oos.flush();} catch (IOException ex) {ex.printStackTrace();} finally {oos.close();}System.out.println(“success…”);}}Ví dụ sử dụng ObjectInputStream để đọc đối tượng student từ file

package com.thienmaonline.vn.bytestream;import java.io.FileInputStream;import java.io.IOException;import java.io.ObjectInputStream;public class DeserializationTransientExample {public static void main(String args) throws Exception {ObjectInputStream ois = null;try {ois = new ObjectInputStream(new FileInputStream(“data/student.txt”));Student student = (Student) ois.readObject();System.out.println(student);} catch (IOException ex) {ex.printStackTrace();} finally {ois.close();}}}Thực thi chương tình SerializationTransientExample, sau đó thực thi chương trình DeserializationTransientExample. Ta có kết quả như sau:

Chuyên mục: Hỏi Đáp