Khái niệm tuần tự hóa Java & Ví dụ Phần II

Trong phần đầu tiên, chúng ta đã thảo luận về tuần tự hóa là gì và làm thế nào để đạt được nó trong Java.

lap-trinh-java
Java Serialization concept

Sử dụng serialVersionUID

Bạn hẳn đã thấy một biến có tên là serial serialVersionUID ‘đã được sử dụng trong mã nguồn. Có một lý do cụ thể đằng sau việc sử dụng biến này.

serialVersionUID là số phiên bản được liên kết với mỗi lớp tuần tự hóa bằng thời gian chạy tuần tự hóa.

Nếu không có  trường serialVersionUID được xác định rõ ràng thì thời gian chạy tuần tự hóa sẽ tính giá trị mặc định cho lớp đó. Mà có thể thay đổi dựa trên việc thực hiện trình biên dịch. Do đó, nên xác định  serialVersionUID.

Bạn nên sử dụng công cụ sửa đổi truy cập riêng cho  serialVersionUID.

Các lớp mảng không thể khai báo một serialVersionUID rõ ràng, vì vậy chúng luôn có giá trị được tính mặc định, nhưng yêu cầu đối với các giá trị serialVersionUID được bỏ qua cho các lớp mảng.

Nếu có sự khác biệt giữa serialVersionUID của lớp người nhận được tải và lớp người gửi tương ứng thì UnlimitedClassException sẽ bị ném.

Sử dụng thoáng qua

Chúng ta có thể lưu trạng thái của một đối tượng bằng cách sử dụng Nối tiếp. Nhưng nếu tôi không muốn lưu trạng thái của một lĩnh vực thì sao? Trong trường hợp này, một công cụ sửa đổi thoáng qua có thể được sử dụng như dưới đây.

Thay đổi lớp Nhân viên với một biến tạm thời.

package com.jbt;
import java.io.Serializable;
public class Employee implements Serializable
{
   public String firstName;
   /*
    * Here transient modifier is used for lastName variable. 
    * This variable's state will not be saved while serialzation.
    * While De-Serialization process default value will be provide.
    * null in this case.
    */
   transient public String lastName;
   private static final long serialVersionUID = 5462223600l;
}

Nếu bạn thực hiện cùng một đầu ra (serializaitonClass & DeserializationClass) sẽ khác với mã trước đó.

Deserializing Employee...
First Name of Employee: Vivekanand
Last Name of Employee: null

Như bạn có thể thấy ở trên, tên cuối cùng là null vì trạng thái của biến đó không được lưu trong quá trình tuần tự hóa.

Phân cấp lớp và tuần tự hóa

Ở đây tôi sẽ thảo luận về ảnh hưởng của giao diện serializable trên hệ thống phân cấp Class. Nếu một lớp đã triển khai giao diện Nối tiếp thì trạng thái của lớp này có thể được lưu.

Để thấy sự khác biệt, chúng tôi sẽ cập nhật lớp Nhân viên gốc. Bây giờ, lớp này sẽ mở rộng một lớp superEmployee khác. Siêu lớp này sẽ không thực hiện giao diện Nối tiếp.

package com.jbt;
import java.io.Serializable;
public class Employee extends superEmployee implements Serializable {
	public String firstName;
	private static final long serialVersionUID = 5462223600l;
}
class superEmployee {
	public String lastName;
}

Nếu bạn thực thi thì serial serialitonitonClass và và DeserializationClass lần lượt sau đó thì đầu ra sẽ như dưới đây .

Deserializing Employee...
First Name of Employee: Vivekanand
Last Name of Employee: null

Bài viết gần đây

Java Lambda: Hướng dẫn cho người mới bắt đầu

Bài viết này giải thích các biểu thức Java Lambda trong Java 8. Biểu thức Lambda Java

Ví dụ về Tải xuống tệp từ máy chủ bằng cách sử dụng JSP

Trong ví dụ này, chúng tôi sẽ tải xuống tệp jsp. Nhưng bạn có thể tải xuống bất kỳ tập tin. 

Hướng dẫn sử dụng Spring JdbcTemplate

Spring JdbcTemplate là một cơ chế mạnh mẽ để kết nối với cơ sở dữ liệu và thực hiện các truy vấn SQL. Nó sử...

Hướng dẫn chủ đề Java

Một Instance of Thread là một đối tượng giống như bất kỳ đối tượng nào khác trong Java và nó chứa các biến và...

Tải tập tin lên máy chủ bằng cách sử dụng JSP

Có nhiều cách để tải tệp lên máy chủ. Một trong những cách là bởi lớp MultipartRequest. Để sử dụng lớp này,...

Ví dụ cấu hình Spring AOP AspectJ Xml

Spring cho phép bạn xác định các khía cạnh, lời khuyên và điểm nhấn trong tệp xml. Trong trang...

Leave a reply

Please enter your comment!
Please enter your name here