Java序列化和反序列化是網絡編程中常用的技術之一。在網絡編程中,序列化和反序列化可以將一個Java對象轉換成字節流的形式,并在不同的網絡設備之間傳輸。
Java中提供了ObjectOutputStream和ObjectInputStream來實現序列化和反序列化。下面是一個例子:
import java.io.*; class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String toString() { return "Name: " + name + ", Age: " + age; } } public class Serialization { public static void main(String[] args) { Person p = new Person("Tom", 20); try { // 將對象序列化 FileOutputStream fileOut = new FileOutputStream("person.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(p); out.close(); fileOut.close(); // 將對象反序列化 FileInputStream fileIn = new FileInputStream("person.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); Person p1 = (Person) in.readObject(); in.close(); fileIn.close(); System.out.println(p1); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
在上面的例子中,我們首先創建一個實現了Serializable接口的Person類。該接口表示該類可以被序列化。我們將一個Person對象序列化并保存在文件“person.ser”中。然后,我們使用ObjectInputStream將文件讀取回來并反序列化成一個Person對象。
需要注意的是,如果我們在序列化/反序列化期間更改了Person類的屬性,也就是說,Person類的版本不同,那么我們將無法成功反序列化對象。這時,會拋出InvalidClassException,因為我們的字節流不再與我們的類相兼容。
上一篇php 401.3