Serialize là gì

Serialization là gì?

Serialization dễ dàng và đơn giản chỉ nên chuyển xuất phát điểm từ một object sống thọ thành một mảng byte. Mảng byte này đại diện đến class của object, phiên phiên bản của object, với tinh thần của object. Mảng byte này rất có thể được sử dụng thân các thiết bị ảo JVM đang làm việc cùng code truyền / phát âm các object. Ngược lại Deserialization là quy trình phát hành lại những byte vào trong 1 đối tượng người tiêu dùng. Java Serialization API cung cấp một lý lẽ chuẩn cho những nhà cách tân và phát triển để giải pháp xử lý đối tượng người tiêu dùng. Trong bài viết này, các bạn sẽ thấy làm nỗ lực như thế nào để serialize một đối tượng người tiêu dùng, cùng vì sao serialization nhiều lúc là cần thiết.

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


*

Tại sao Serialization lại phải thiết?

Trong quả đât thời buổi này, một ứng dụng công ty nổi bật sẽ có tương đối nhiều yếu tố và sẽ được phân phối bên trên những hệ thống với mạng khác nhau. Trong Java, đông đảo sản phẩm được trình diễn dưới dạng các đối tượng; Nếu nhì yếu tố Java mong giao tiếp với nhau, cần phải có một lý lẽ để đàm phán dữ liệu. Một phương pháp để đạt được vấn đề đó là xác minh giao thức của riêng biệt các bạn với chuyển một đối tượng người dùng. Như vậy có nghĩa là đầu nhấn phải ghi nhận giao thức được áp dụng vì chưng tín đồ gửi để tạo thành lại đối tượng người sử dụng, điều này làm cho việc rỉ tai với những thành phần của mặt sản phẩm công nghệ bố vô cùng khó khăn. Do kia, cần được bao gồm một giao thức chung thông thường với hiệu quả để chuyển đối tượng người tiêu dùng thân các thành phần. Serialization được quan niệm mang đến mục tiêu này, và những thành phần Java sử dụng giao thức này nhằm đưa những đối tượng người sử dụng.


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

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

, nó chỉ tất cả trọng trách đã cho thấy đó là object hoàn toàn có thể serialized được.

Hai lớp ObjectInputStream và 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 lại một output stream ObjectInputStream : public final Object readObject() throws IOException, ClassNotFoundException => đây là cách làm để đưa ra object từ stream và deserializes nó. Giá trị trả về là 1 trong những object, vì chưng vậy bạn phải xay giao diện mang lại nó.

Xem thêm: Làm Sao Để Đến Viện Y Học Phóng Xạ Và Ung Bướu Quân Đội, Viện Y Học Phóng Xạ Và U Bướu Quân Đội

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

Chúng ta có một 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 lớn " + name + " " + address);Lưu ý:

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

Serializing một Object

lấy một ví dụ dưới đây khởi sản xuất 1 object Employee, kế tiếp serializes nó với lưu 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 - Phường.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 khi mà object được serialized, tuy nhiên chính vì nó được đặt trường đoản cú khóa transient buộc phải giá trị của chính nó không được gửi đến output stream. Vì vậy sau thời điểm deserialize nó mới có giá trị là 0.

Java"s serialization algorithm

Bây giờ chúng ta sẽ tất cả kiến thức về làm cố gắng làm sao để serialize với deserialize một object rồi. Vậy bề ngoài thao tác làm việc ẩn phía dưới là gì? OK, đây là câu trả lời: