Serialization là gì?

Serialization đơn giản chỉ với gửi từ 1 object tồn tại thành một mảng byte. Mảng byte này thay mặt mang đến class của object, phiên phiên bản của object, và tâm trạng của object. Mảng byte này có thể được thực hiện giữa các đồ vật ảo JVM đang chạy cùng code truyền / gọi các object. Ngược lại Deserialization là quy trình thi công lại những byte vào trong 1 đối tượng. Java Serialization API cung cấp một cách thức chuẩn chỉnh cho các bên cải tiến và phát triển nhằm xử lý đối tượng. Trong nội dung bài viết này, các bạn sẽ thấy làm rứa làm sao để serialize một đối tượng người tiêu dùng, cùng tại sao serialization đôi khi là quan trọng.

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

*

Tại sao Serialization lại yêu cầu thiết?

Trong trái đất ngày này, một áp dụng công ty điển hình sẽ có rất nhiều yếu tắc với sẽ được phân phối bên trên những hệ thống và mạng khác biệt. Trong Java, phần lớn trang bị được biểu diễn bên dưới dạng những đối tượng; Nếu nhị thành phần Java ý muốn giao tiếp với nhau, cần được có một phương pháp nhằm hiệp thương tài liệu. Một phương pháp để dành được vấn đề này là xác minh giao thức của riêng rẽ bạn cùng gửi một đối tượng người sử dụng. Vấn đề này Tức là đầu dìm phải ghi nhận giao thức được thực hiện vị người gửi nhằm tạo ra lại đối tượng người sử dụng, điều này tạo cho việc nói chuyện cùng với những nguyên tố của bên trang bị bố cực kỳ khó khăn. Do kia, rất cần phải tất cả một giao thức bình thường chung với công dụng nhằm gửi đối tượng người sử dụng thân các nguyên tố. Serialization được quan niệm đến mục đích này, cùng những nguyên tố Java thực hiện giao thức này để chuyển các đối tượng người dùng.

lấy ví dụ như về Serialization với Deserialization

Để mà serialize một object, bạn cần phải đảm bảo rằng class của object đó implements java.io.Serializable interface. Serializable interface chỉ là 1 trong marker interface, bản thân nó chẳng khái niệm 1 cách tiến hành làm sao cả

*
, nó chỉ gồm nhiệm vụ chỉ ra rằng đây là object rất có thể serialized được.

Hai lớp ObjectInputStream cùng ObjectOutputStream đựng các phương thức dùng làm serializing và deserializing một object.ObjectOutputStream : public final void writeObject(Object x) throws IOException => đây là cách làm nhằm serializes một Object với gửi nó mang đến một output streamObjectInputStream : public final Object readObject() throws IOException, ClassNotFoundException => đó là phương thức để lấy ra object tự stream và deserializes nó. Giá trị trả về là 1 object, bởi vậy bạn phải xay kiểu cho nó.

Xem thêm: Nghĩa Của Từ Outstanding Balance Là Gì, Nghĩa Của Từ Outstanding Balance

OK, hiện thời bọn họ vẫn bước vào ví dụ rõ ràng ^^!

Chúng ta có 1 lớp Employee nlỗi sau

package vuta.serialization.example;public class Employee implements java.io.Serializable public String name;public String address;public transient int SSN;public int number;public void mailCheck() System.out.println("Mailing a kiểm tra to " + name + " " + address);Lưu ý:

Phải implement the java.io.Serializable interface, còn nếu không java.io.NotSerializableException sẽ xảy raTất cả các ở trong tính trong class cần serializable. Nếu ở trong tính như thế nào không serializable, nó bắt buộc được sử dụng từ khóa transient.

Serializing một Object

lấy một ví dụ dưới đây khởi chế tạo 1 object Employee, sau đó serializes nó và lưu lại vào 1 tệp tin.

package vuta.serialization.example;import java.io.*;public class SerializeDemo public static void main(String<> args) Employee e = new Employee();e.name = "Tran Anh Vu";e.address = "138 Le Duan - P..Nguyen Du - Q.Hai Ba Trung - Ha Noi";e.SSN = 11122333;e.number = 101;try FileOutputStream fileOut = new FileOutputStream("C:\employee.data");ObjectOutputStream out = new ObjectOutputStream(fileOut);out.writeObject(e);out.close();fileOut.close();System.out.printf("Serialized data is saved in C:\employee.data"); catch (IOException i) i.printStackTrace();

Deserializing một Object

package vuta.serialization.example;import java.io.*;public class DeserializeDemo public static void main(String<> args) Employee e = null;try FileInputStream fileIn = new FileInputStream("C:\employee.data");ObjectInputStream in = new ObjectInputStream(fileIn);e = (Employee) in.readObject();in.close();fileIn.close(); catch (IOException i) i.printStackTrace();return; catch (ClassNotFoundException c) System.out.println("Employee class not found");c.printStackTrace();return;System.out.println("Deserialized Employee...");System.out.println("Name: " + e.name);System.out.println("Address: " + e.address);System.out.println("SSN: " + e.SSN);System.out.println("Number: " + e.number);Lưu ý:

Thuộc tính SSN có giá trị 11122333 Lúc mà lại object được serialized, cơ mà cũng chính vì nó được đặt từ khóa transient phải quý giá của chính nó ko được gửi mang đến output stream. Vì vậy sau khoản thời gian deserialize nó new có mức giá trị là 0.

Xem thêm: Định Nghĩa Của Từ " Nỗ Lực Tiếng Anh Là Gì, Nỗ Lực Tiếng Anh Là Gì

Java"s serialization algorithm

Bây giờ bọn họ sẽ tất cả kỹ năng và kiến thức về làm cầm như thế nào nhằm serialize với deserialize một object rồi. Vậy qui định thao tác làm việc ẩn phía bên dưới là gì? OK, đấy là câu trả lời:

Thứ nhất ghi ra metadata của class nhưng liên quan mang đến instance được serializeTiếp theo đệ quy ghi ra diễn đạt của lớp cha cho đến Lúc kiếm tìm thấy java.lang.object.Một Khi xong xuôi ghi ra metadata của tất cả các class, đệ quy ghi với tài liệu thực tiễn liên quan đến các class. Nhưng lần này, ban đầu trường đoản cú lớp superclass bên trên cùng(Object).

Một vài vấn đề cần lưu ý

Nếu superclass là Serializable thì những lớp bé của chính nó đang auto được Serializable.lúc các bạn serialize ngẫu nhiên object như thế nào cơ mà nó bao gồm chứa tyêu thích chiếu cho object khác thì Java serialization đang serialize luôn luôn cả object kia (nếu object được tham mê chiếu ko implement the java.io.Serializable interface thì java.io.NotSerializableException đang xảy raQuý khách hàng cấp thiết serialize những biến static

Hy vọng rằng bài viết này hữu dụng so với những bạn!


Chuyên mục: CÔNG NGHỆ
Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *