在Java中,序列化是指將一個Java對象轉(zhuǎn)換成可以存儲或傳輸?shù)男问降倪^程,而反序列化則是將其從存儲或傳輸?shù)男问街谢謴?fù)成Java對象的過程。序列號和反序列號是Java中最常用的技術(shù)之一,它可以將對象轉(zhuǎn)換為字節(jié)流,存儲到磁盤或者通過網(wǎng)絡(luò)進(jìn)行傳輸。
Java序列化的實(shí)現(xiàn)需要使用到Serializable接口,所有需要被序列化的類都需要實(shí)現(xiàn)Serializable接口: public 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 "Person(name=" + name + ", age=" + age + ")"; } } 在上述代碼中,我們將一個簡單的Person類實(shí)現(xiàn)了Serializable接口。在使用這個類進(jìn)行序列化的時候,可以通過以下代碼實(shí)現(xiàn): Person person = new Person("Alice", 25); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.txt")); oos.writeObject(person); oos.close(); 上述代碼將Person對象序列化為一個字節(jié)流,并且存儲到了person.txt文件中。反序列化的過程非常類似,只需要讀取文件并轉(zhuǎn)換成Java對象即可: ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.txt")); Person person = (Person) ois.readObject(); ois.close(); System.out.println(person); 在上述代碼中,我們使用ObjectInputStream讀取person.txt文件中的數(shù)據(jù),并通過強(qiáng)制類型轉(zhuǎn)換將字節(jié)流轉(zhuǎn)換為Person對象,最后將對象打印出來。
需要注意的是,Java序列化的過程是將一個對象的狀態(tài)信息轉(zhuǎn)換成字節(jié)流的過程,而不是將對象本身進(jìn)行傳輸或者復(fù)制。除此之外,序列化和反序列化的兩端需要使用相同的類加載器,否則會導(dǎo)致反序列化失敗。