一、什麼是Java序列號
Java 序列號是將一個對象轉換成字節序列的過程,以便進行持久化,網絡傳輸或者程序間的數據交換。
對 Java 對象進行序列化的代碼通常使用 java.io 庫中的 ObjectOutputStream 類。
二、如何對Java對象進行序列化
1、實現 java.io.Serializable 接口。該接口為空接口,它的目的是表明類的對象可以被序列化。如果不實現 Serializable 接口,將在運行時拋出 NotSerializableException。
public class Student implements java.io.Serializable {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
2、使用 ObjectOutputStream 對象的 writeObject 方法。以下是將 Student 對象寫入文件的示例:
try {
FileOutputStream fos = new FileOutputStream("student.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
Student student = new Student("Tom", 18);
oos.writeObject(student);
oos.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
三、如何反序列化對象
1、使用 ObjectInputStream 對象的 readObject 方法。以下是從文件中讀取 Student 對象的示例:
try {
FileInputStream fis = new FileInputStream("student.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
Student student = (Student) ois.readObject();
System.out.println(student.getName() + ", " + student.getAge());
ois.close();
fis.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
四、注意事項
1、序列化過程中,所有字段都被序列化,包括私有字段和 final 字段。
2、如果一個類的某個字段不想被序列化,可以使用 transient 修飾該字段。
3、序列化的類和反序列化的類必須是同一個類。如果兩者不匹配,會拋出 InvalidClassException。
4、Java默認的序列化機制不夠靈活,如果需要更靈活的序列化方式,可以考慮使用第三方開源庫,如 Google 的 ProtoBuf。
五、總結
Java 序列化是一種將對象轉換成字節流的過程。通過實現 Serializable 接口,使用 ObjectOutputStream 和 ObjectInputStream 可以實現對象的序列化和反序列化。
需要注意的是,序列化的類和反序列化的類必須是同一個類,並且默認的序列化機制存在一些局限性,適用場景較為受限。
原創文章,作者:WTSV,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/140938.html
微信掃一掃
支付寶掃一掃