Serialization là một cơ chế trong lập trình Java cho phép bạn chuyển đổi đối tượng Java thành một dạng dữ liệu byte có thể được lưu trữ hoặc truyền qua mạng và sau đó chuyển đổi lại thành đối tượng gốc. Quá trình chuyển đổi này gọi là Serialization và Deserialization.
Khi một đối tượng được “serialize”, nó sẽ được mã hóa thành dạng dữ liệu byte để lưu trữ hoặc truyền đi. Đối tượng sau khi được serialize có thể được lưu vào tệp (file) hoặc truyền qua mạng.
Khi cần sử dụng lại đối tượng từ dạng dữ liệu byte, quá trình ngược lại được thực hiện, gọi là “deserialize”. Quá trình này cho phép bạn tái tạo đối tượng gốc từ dữ liệu byte đã serialize.
Để thực hiện Serialization và Deserialization trong Java, lớp cần được đánh dấu là Serializable bằng cách triển khai giao diện java.io.Serializable
. Điều này cho phép JVM biết rằng các đối tượng của lớp có thể được serialize.
Dưới đây là một ví dụ về cách sử dụng Java Serialization:
java
import java.io.*;
public class SerializationExample {
public static void main(String[] args) {
// Serialize đối tượng
try {
// Tạo một đối tượng để serialize
Student student = new Student("John", 25);
// Mở luồng ghi dữ liệu vào tệp student.ser
FileOutputStream fileOut = new FileOutputStream("student.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
// Serialize đối tượng
out.writeObject(student);
// Đóng luồng
out.close();
fileOut.close();
System.out.println("Đối tượng đã được serialize thành công.");
} catch (IOException e) {
e.printStackTrace();
}
// Deserialize đối tượng
try {
// Mở luồng đọc dữ liệu từ tệp student.ser
FileInputStream fileIn = new FileInputStream("student.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
// Deserialize đối tượng
Student student = (Student) in.readObject();
// Đóng luồng
in.close();
fileIn.close();
// In thông tin đối tượng đã được deserialize
System.out.println("Tên: " + student.getName());
System.out.println("Tuổi: " + student.getAge());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
class Student implements Serializable {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
Trong ví dụ trên, chúng ta đã tạo một lớp Student
triển khai Serializable và sử dụng Java Serialization để serialize và deserialize một đối tượng Student
.