Trong bài trước, các bạn đã biết về Serialization giúp chúng ta có thể lưu trữ trạng thái của một Java object, tất cả các thuộc tính của Java object sẽ được lưu giữ giá trị ở một nơi nào đó để tiến trình khác có thể lấy ra mà sử dụng lại.
Nhưng trong thực tế đôi khi bạn lại có nhu cầu một số thuộc tính của Java object được Serialization không được Serialization, có nghĩa trạng thái của những thuộc tính đó không được lưu giữ, giá trị của chúng sẽ là giá trị mặc định khi khởi tạo Java object.
OK, để các bạn hiểu rõ hơn, chúng ta hãy cùng xem xét lại ví dụ mình đã làm trong bài viết Nói về Serialization trong Java các bạn nhé!
Chúng ta đã có đối tượng Student, giờ mình muốn thuộc tính age của đối tượng này sẽ không được Serialization. Mình sẽ khai báo đối tượng Student lại như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package com.huongdanjava.javaexample; import java.io.Serializable; public class Student implements Serializable { private static final long serialVersionUID = 1L; private String name; private transient int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } |
Giờ mình sẽ chạy lại đoạn code Serialization đối tượng Student:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package com.huongdanjava.javaexample; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; public class SerializationExample { public static void main(String[] args) { // Create Student object Student student = new Student(); student.setName("Khanh"); student.setAge(30); try ( // Use FileOutputStream to save Student object into a file FileOutputStream fos = new FileOutputStream("E:\\student.txt"); ObjectOutputStream oos = new ObjectOutputStream(fos); ) { oos.writeObject(student); } catch (IOException i) { i.printStackTrace(); } } } |
Sau đó đọc lại tập tin student.txt lên:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package com.huongdanjava.javaexample; import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; public class DeserializationExample { public static void main(String[] args) { Student student = null; try ( FileInputStream fos = new FileInputStream("E:\\student.txt"); ObjectInputStream oos = new ObjectInputStream(fos); ) { student = (Student) oos.readObject(); } catch (IOException i) { i.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } System.err.println(student.getName()); System.err.println(student.getAge()); } } |
Kết quả:
Các bạn thấy đó, giá trị của thuộc tính age đã không còn là 30 như trước nữa.