一、什麼是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-hk/n/140938.html