Serialversionuid là gì

     

Khi lập trình với Java có lẽ rằng bạn đã phát hiện khái niệm serialize nhất là khi đọc ghi object ra file, mapping với cửa hàng 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 dùng (giá trị những thuộc tính trong object) thành một chuỗi byte làm sao để cho chuỗi byte này còn 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 biến hóa chuỗi byte thành đối tượng gọi là deserialization.

Một object rất có thể serializable (có thể thực hiện Serialization) nếu như class của nó thực hiện implements interface java.io.Serializable

Tại sao bắt buộc Serialization?

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

Quá trình serilization hoàn toàn chủ quyền với platform (không nhờ vào vào hệ điều hành) phải việc biến đổi giữa byte cùng object giữa những module được đảm bảo.

*

Code ví dụ

Ví dụ mình tất cả 2 module, một module triển khai chuyển đối tượng Customer thành byte và ghi ra file .Một module tiến hành đọc byte từ bỏ file và chuyển trái lại thành đối tượng Customer.

(Trong thực tế thì 2 module rất có thể trao lật sang database, network chứ chưa hẳn qua file)

package giaynamdavinci.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 vẫn gồm tất cả 3 ở trong tính là id, name cùng address trong những số đó address được đánh dấu là transient có nghĩa là nó sẽ không còn được serialization.private static final long serialVersionUID = 1L; để đảm bảo an toàn chắc chắn rằng đối tượng trước và sau thời điểm serialization là mộtpackage giaynamdavinci.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 được ghi có phải là serializable không, tiếp đến sẽ đưa thành byte và triển khai khi.

Xem thêm: Về Cơ Bản Mạch Điện Tử Thường Được Phân Loại Theo, Mạch Điện Tử

Kết quả:

Customer before serialization:Customer

*

Tiếp theo mình tiến hành đọc tài liệu từ file và gửi thành đối tượng người sử dụng Customer.

package giaynamdavinci.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 file dạng đối tượng người tiêu dùng Customer nên sau khi readObject() mình đang ép thành kiểu đối tượng người dùng Customer (Nếu các bạn khi ra tệp tin dạng Map, danh sách thì cơ hội đọc chúng ta 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 có dữ liệu.

Xem thêm: Hướng Dẫn Sử Dụng Mặt Nạ Nhau Thai Cừu, 5 Lợi Ích Và Cách Sử Dụng

Một số lưu ý về Serialization vào Java

Nếu class cha implement Serializable thì các class con không yêu cầu thực hiện implement SerializablenữaCác ở trong tính static với transient sẽ không được serializationHàm khởi chế tác (constructor) sẽ không còn được call khi một đối tượng người dùng được deserializationKhi tiến hành serialization một đối tượng người sử dụng thì tất cả các thuộc tính bên trong nó đều phải là serializable (áp dụng với những thuộc tính có kiểu đối tượng, lấy ví dụ object Person có thuộc tính Address thì nằm trong tính Address đó cũng phải implement Serializable nếu không sẽ bị lỗi java.io.NotSerializableException khi tiến hành serialization đối tượng người sử dụng person).