Trước đây khi mình dùng C/C++ để lưu trữ một struct ra file ta phải lưu từng trường của struct, rồi quy định cấu trúc file... rất vất vả. Nay với Java chỉ cần một vài câu lệnh đơn giản bạn có thể lưu trữ bất kì đối tượng nào mà bạn muốn.
Trước tiên là ví dụ về cách ghi đối tượng ra file:
Giả sử mình có class sau, lưu ý là cần
implements java.io.Serializable:
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);
}
}
Và cách ghi đối tượng ra file như sau:
import java.io.*;
public class SerializeDemo
{
public static void main(String [] args)
{
Employee e = new Employee();
e.name = "Reyan Ali";
e.address = "Phokka Kuan, Ambehta Peer";
e.SSN = 11122333;
e.number = 101;
try
{
FileOutputStream fileOut =
new FileOutputStream("/tmp/employee.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(e);
out.close();
fileOut.close();
System.out.printf("Serialized data is saved in /tmp/employee.ser");
}catch(IOException i)
{
i.printStackTrace();
}
}
}
Chú ý hàm writeObject(object) đây chính là hàm thực hiện nhiệm vụ ghi đối tượng ra file.
Vậy nếu ta muốn load lại đối tượng này từ file thì sao?
Trong Java gọi điều này là Deserializing an Object nghĩa nôm na của nó giống như giải mã đối tượng từ file đã ghi vậy.
Hãy cùng xem ví dụ sau để hiểu rõ hơn:
import java.io.*;
public class DeserializeDemo
{
public static void main(String [] args)
{
Employee e = null;
try
{
FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
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);
}
}
Chú ý hàm readObject() hàm này sẽ đọc lên đối tượng từ file mà mình đã ghi từ trước để trả giá trị là một Object. Cho nên bạn cần ép kiểu đối tượng mà mình mong muốn, trong ví dụ chính là kiểu Employee.
Vậy là bạn đã có thể đọc/ghi đối tượng ra file một cách dề dàng và nhanh chóng phải không? Mong bạn thích bài viết của mình :D
Source:
http://www.tutorialspoint.com/java/java_serialization.htm