Khi lập trình sẵn với Java chắc hẳn bạn đã phát hiện khái niệm serialize nhất là khi đọc ghi object ra file, mapping với đại lý dữ liệu…

Java Serializable là gì?

Serialization trong Java là cơ chế biến hóa trạng thái của một đối tượng người tiêu dùng (giá trị các thuộc tính vào object) thành một chuỗi byte sao để cho chuỗi byte này có thể chuyển đổi ngược lại thành một đối tượng.

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

Quá trình chuyển đổi chuỗi byte thành đối tượng người dùng gọi là deserialization.

Một object có thể serializable (có thể thực hiện Serialization) trường hợp class của nó tiến hành implements interface java.io.Serializable

Tại sao yêu cầu Serialization?

Trong Java, khi trao đổi dữ liệu giữa những thành phần không giống nhau (giữa những module thuộc viết bởi Java) thì dữ liệu được thể hiện dưới dạng byte chứ chưa hẳn là đối tượng. Cho nên vì vậy ta cần có một cơ chế để gọi các đối tượng người tiêu dùng được gửi với nhận.

Quá trình serilization hoàn toàn độc lập với platform (không dựa vào vào hệ điều hành) đề xuất việc đổi khác giữa byte và object giữa những module được đảm bảo.

*

Code ví dụ

Ví dụ mình gồm 2 module, một module triển khai chuyển đối tượng Customer thành byte và ghi ra file .Một module triển khai đọc byte tự file cùng chuyển ngược lại thành đối tượng người tiêu dùng Customer.

(Trong thực tế thì 2 module có thể trao lật qua database, network chứ không hẳn qua file)

package fkhorizont-turnovo.com.serializable.demo;import java.io.Serializable;public class Customer implements Serializable private static final long serialVersionUID = 1L; private int id; private String name; private transient String address;
Override public String toString() return "Customer "; // getter - setterĐối tượng Customer đã gồm bao gồm 3 thuộc tính là id, name cùng address trong những số đó address được ghi lại là transient tức là nó sẽ không được serialization.private static final long serialVersionUID = 1L; để đảm bảo chắc chắn rằng đối tượng người dùng trước và sau khi serialization là mộtpackage fkhorizont-turnovo.com.serializable.demo;import java.io.*;public class WriteObjectDemo public static void main(String<> args) throws FileNotFoundException, IOException ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("src/customer.dat"))); Customer customer = new Customer(); customer.setId(1); customer.setName("kai"); customer.setAddress("ha noi"); System.out.println("Customer before serialization:"); System.out.println(customer); oos.writeObject(customer); oos.close(); Method writeObject() sẽ kiểm tra đối tượng người sử dụng được ghi có phải là serializable không, tiếp nối sẽ gửi thành byte và tiến hành khi.

Kết quả:

Customer before serialization:Customer

*

Tiếp theo mình triển khai đọc tài liệu từ file và đưa thành đối tượng người tiêu dùng Customer.

package fkhorizont-turnovo.com.serializable.demo;import java.io.*;public class ReadObjectDemo public static void main(String<> args) throws FileNotFoundException, IOException, ClassNotFoundException ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("src/customer.dat"))); System.out.println("Customer after deserialization:"); Customer customer = (Customer) ois.readObject(); System.out.println(customer); ois.close(); Method readObject() sẽ đưa byte thành đối tượng.

Vì bản thân ghi ra tệp tin dạng đối tượng người dùng Customer nên sau khi readObject() mình đang ép thành kiểu đối tượng người tiêu dùng Customer (Nếu các bạn khi ra file dạng Map, các mục thì thời điểm đọc các bạn phải nghiền đúng hình dáng tương ứng.

Kết quả:

Customer after deserialization:Customer Trường address là transient nên sau thời điểm deserialization sẽ không tồn tại dữ liệu.

Xem thêm: Hình Học 12 Bài 2: Phương Trình Mặt Phẳng Lớp 12 Bài 2: Phương Trình Mặt Phẳng

Một số để ý về Serialization trong Java

Nếu class cha implement Serializable thì những class nhỏ không bắt buộc thực hiện implement SerializablenữaCác thuộc tính static với transient sẽ không được serializationHàm khởi chế tạo ra (constructor) sẽ không được hotline khi một đối tượng được deserializationKhi triển khai serialization một đối tượng người sử dụng thì tất cả các nằm trong tính bên phía trong nó đều nên là serializable (áp dụng với các thuộc tính gồm kiểu đối tượng, lấy một ví dụ object Person có thuộc tính Address thì trực thuộc tính Address này cũng phải implement Serializable nếu không sẽ bị lỗi java.io.NotSerializableException khi thực hiện serialization đối tượng person).