Java序列化作用:
Java序列化是將Java對象轉(zhuǎn)換為字節(jié)序列的過程,使其可以在網(wǎng)絡上傳輸或保存到文件中。它的主要作用如下:
1. 對象的持久性:Java 序列化能夠使 Java 對象的數(shù)據(jù)持久化,以便在程序重啟后保留數(shù)據(jù)。
2. 對象的網(wǎng)絡傳輸:Java 序列化可以在網(wǎng)絡中傳輸對象,例如將對象序列化為字節(jié)流,在網(wǎng)絡上傳輸,然后反序列化為對象。
3. 對象的深拷貝:Java 序列化可以使用深拷貝技術將一個對象復制到另一個對象中。
Java序列化實現(xiàn): Java序列化是完全自動化的,只需要實現(xiàn)Serializable接口即可實現(xiàn)序列化和反序列化。下面是實現(xiàn)方法: public class Student implements Serializable{ private String name; private int age; private String gender; //構造方法 public Student(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } //... } public class SerializeDemo { public static void main(String [] args) { Student s = new Student("Tom", 20, "male"); try { FileOutputStream fileOut = new FileOutputStream("student.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(s); out.close(); fileOut.close(); System.out.printf("Serialized data is saved in student.ser"); } catch (IOException i) { i.printStackTrace(); } } }
在上述代碼中,我們實現(xiàn)了一個Student類,并在SerializeDemo類中將Student對象序列化為字節(jié)序列并保存在文件中。我們需要使用對象輸出流 ObjectOutputStream 類來將對象序列化為字節(jié)序列。 然后,將字節(jié)序列寫入磁盤。 相反,如果我們想要從文件中反序列化該對象,只需使用對象輸入流 ObjectInputStream 類即可。
反序列化代碼實現(xiàn): public class DeserializeDemo { public static void main(String [] args) { Student s = null; try { FileInputStream fileIn = new FileInputStream("student.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); s = (Student) in.readObject(); in.close(); fileIn.close(); } catch (IOException i) { i.printStackTrace(); return; } catch (ClassNotFoundException c) { System.out.println("Student class not found"); c.printStackTrace(); return; } System.out.println("Deserialized Student..."); System.out.println("Name: " + s.name); System.out.println("Age: " + s.age); System.out.println("Gender: " + s.gender); } }
在上述代碼中,我們使用對象輸入流 ObjectInputStream 類來將反序列化 Student 對象。 在讀取字節(jié)序列之后,將其轉(zhuǎn)換回實際的對象類型將其強制轉(zhuǎn)換為 Student 對象并將其打印出來。