Serialization Là Gì

     

Serialization là gì?

Serialization dễ dàng chỉ là chuyển xuất phát từ một object tồn tại thành một mảng byte. Mảng byte này thay mặt đại diện cho class của object, phiên bạn dạng của object, và trạng thái của object. Mảng byte này hoàn toàn có thể được thực hiện giữa các máy ảo JVM đang hoạt động cùng code truyền / đọc các object. Trái lại Deserialization là quy trình xây dựng lại các byte vào một đối tượng. Java Serialization API hỗ trợ một cơ chế chuẩn chỉnh cho những nhà cách tân và phát triển để cách xử lý đối tượng. Trong nội dung bài viết này, các bạn sẽ thấy làm vắt nào để serialize một đối tượng, và nguyên nhân serialization thỉnh thoảng là đề nghị thiết.

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


*

Tại sao Serialization lại cần thiết?

Trong nhân loại ngày nay, một ứng dụng doanh nghiệp điển hình nổi bật sẽ có tương đối nhiều thành phần và sẽ tiến hành phân phối bên trên các khối hệ thống và mạng khác nhau. Trong Java, đông đảo thứ được màn trình diễn dưới dạng các đối tượng; ví như hai yếu tắc Java muốn giao tiếp với nhau, cần phải có một nguyên tắc để bàn bạc dữ liệu. Một cách để đạt được vấn đề đó là xác minh giao thức của riêng các bạn và chuyển một đối tượng. Điều này có nghĩa là đầu nhận phải biết giao thức được sử dụng bởi người gửi để tạo lại đối tượng, điều này tạo nên việc thủ thỉ với các thành phần của mặt thứ ba rất khó khăn. Bởi đó, cần phải có một giao thức chung chung và hiệu quả để chuyển đối tượng giữa các thành phần. Serialization được quan niệm cho mục đích này, và các thành phần Java thực hiện giao thức này để chuyển những đối tượng.

Ví dụ về Serialization với Deserialization

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

, nó chỉ có trách nhiệm chỉ ra đây là object có thể serialized được.


Hai lớp ObjectInputStream với ObjectOutputStream chứa những 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à phương thức nhằm serializes một Object cùng gửi nó mang lại một output đầu ra stream ObjectInputStream : public final Object readObject() throws IOException, ClassNotFoundException => đấy là phương thức để đưa ra object từ bỏ stream và deserializes nó. Cực hiếm trả về là 1 trong object, bởi vì vậy bạn cần phải ép kiểu mang đến nó.

Xem thêm: Tên Tiếng Anh Các Phòng Kế Hoạch Tổng Hợp Tiếng Anh Là Gì : Cách Viết, Ví Dụ

OK, bây giờ chúng ta sẽ đi vào ví dụ ví dụ ^^!

Chúng ta có 1 lớp Employee như 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 check to " + name + " " + address);Lưu ý:


Phải implement the java.io.Serializable interface, nếu như không java.io.NotSerializableException vẫn xảy raTất cả những thuộc tính vào class nên serializable. Nếu thuộc tính nào không serializable, nó phải được dùng từ khóa transient.

Serializing một Object

Ví dụ dưới đây khởi tạo nên 1 object Employee, tiếp nối serializes nó với lưu vào 1 file.

Xem thêm: Có Nên Sử Dụng Đèn Xông Tinh Dầu Có Tác Dụng Gì, Đèn Xông Tinh Dầu Là Gì

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 tía 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 khi cơ mà object được serialized, nhưng cũng chính vì nó được để từ khóa transient đề nghị giá trị của chính nó không được gửi mang đến output stream. Do vậy sau khi deserialize nó mới có giá trị là 0.

Java"s serialization algorithm

Bây giờ họ đã có kỹ năng và kiến thức về làm ráng nào nhằm serialize cùng deserialize một object rồi. Vậy cơ chế làm việc ẩn bên dưới là gì? OK, đó là câu trả lời: