JAVA序列化和反序列化
文章目錄
- JAVA序列化和反序列化
- 序列化
- 什么是序列化?
- 為什么要進行序列化?
- 如何將對線進行序列化
- 具體實現過程
- 完整代碼
序列化
什么是序列化?
就是將對象轉化為字節的過程
為什么要進行序列化?
- 讓數據更高效的傳輸
- 讓數據更好的被存儲
如何將對線進行序列化
對象要想進行序列化必須滿足兩個條件:
- 該類必須實現 java.io.Serializable 接口
- 該類的所有屬性必須是可序列化的
具體實現過程
通過implements實現序列化接口:
import java.io.Serializable;public class student implements Serializable {public String name;public int course;public int age;public void behavior(){System.out.println("I am student");}
}
這樣就允許該對象類被序列化,重寫序列化函數
// 導入java.io.*包,這個包包含了Java IO的所有類和接口,提供了全面的輸入/輸出接口支持。
import java.io.*;// 定義一個名為Serialization_And_Unserialization的公共類。這個類將演示如何實現對象的序列化和反序列化。
public class Serialization_And_Unserialization {// 定義一個公共方法Serialize,它接受一個Object類型的對象和一個File類型的文件名作為參數。這個方法將對象序列化并寫入到指定的文件中。 public void Serialize(Object obj,File filename) throws IOException {// 創建一個FileOutputStream對象,它將創建一個新的文件輸出流,允許將字節寫入到指定的文件中。 FileOutputStream FO = new FileOutputStream(filename); //新建一個文件輸出流 將字節寫入文件的輸出流 // 創建一個ObjectOutputStream對象,它將創建一個新的對象輸出流,用于將對象序列化并寫入到之前創建的文件輸出流中。 ObjectOutputStream OOS = new ObjectOutputStream(FO);// 使用ObjectOutputStream的writeObject方法將對象序列化并寫入到文件輸出流中。 OOS.writeObject(obj);}
}
使用我們上篇java基礎文字寫好的對象來進行測試
import java.io.File; // 導入文件類,用于創建文件對象
import java.io.IOException; // 導入IOException類,處理IO操作可能出現的異常 public class Xl { // 定義一個名為Xl的公共類 public static void main(String[] args) throws IOException, ClassNotFoundException { // 主方法,程序入口 student stu2 =new student(); // 創建一個名為stu2的學生對象 Serialization_And_Unserialization s =new Serialization_And_Unserialization(); // 創建一個Serialization_And_Unserialization對象,用于進行對象的序列化和反序列化操作 s.Serialize(stu2, new File("stu2.txt")); // 使用Serialize方法將stu2對象序列化并保存到名為stu2.txt的文件中 }
}
我們可以看到文件已經生成了
接下來再寫一個方法將它進行反序列化
public Object Unserialize(String filename) throws IOException, ClassNotFoundException {// 創建一個FileInputStream對象,它將創建一個新的文件輸入流,允許從指定的文件中讀取字節。FileInputStream FI = new FileInputStream(filename);// 創建一個ObjectInputStream對象,它將創建一個新的對象輸入流,用于從之前創建的文件輸入流中讀取并反序列化對象。ObjectInputStream OIS = new ObjectInputStream(FI);// 使用ObjectInputStream的readObject方法從文件輸入流中讀取并反序列化對象,然后返回這個對象。return OIS.readObject();}
我們進行調用
Object stu3=s.Unserialize("stu2.txt"); // 使用Unserialize方法從名為stu2.txt的文件中讀取并反序列化對象,然后將其賦給stu3變量System.out.println(stu3); // 打印stu3對象
看到已經準換回來了
完整代碼
重寫方法代碼
// 導入java.io.*包,這個包包含了Java IO的所有類和接口,提供了全面的輸入/輸出接口支持。
import java.io.*;// 定義一個名為Serialization_And_Unserialization的公共類。這個類將演示如何實現對象的序列化和反序列化。
public class Serialization_And_Unserialization {// 定義一個公共方法Serialize,它接受一個Object類型的對象和一個File類型的文件名作為參數。這個方法將對象序列化并寫入到指定的文件中。 public void Serialize(Object obj,File filename) throws IOException {// 創建一個FileOutputStream對象,它將創建一個新的文件輸出流,允許將字節寫入到指定的文件中。 FileOutputStream FO = new FileOutputStream(filename); // 創建一個ObjectOutputStream對象,它將創建一個新的對象輸出流,用于將對象序列化并寫入到之前創建的文件輸出流中。 ObjectOutputStream OOS = new ObjectOutputStream(FO);// 使用ObjectOutputStream的writeObject方法將對象序列化并寫入到文件輸出流中。 OOS.writeObject(obj);}// 定義一個公共方法Unserialize,它接受一個String類型的文件名作為參數。這個方法將從指定的文件中讀取對象并將其反序列化。public Object Unserialize(String filename) throws IOException, ClassNotFoundException {// 創建一個FileInputStream對象,它將創建一個新的文件輸入流,允許從指定的文件中讀取字節。FileInputStream FI = new FileInputStream(filename);// 創建一個ObjectInputStream對象,它將創建一個新的對象輸入流,用于從之前創建的文件輸入流中讀取并反序列化對象。ObjectInputStream OIS = new ObjectInputStream(FI);// 使用ObjectInputStream的readObject方法從文件輸入流中讀取并反序列化對象,然后返回這個對象。return OIS.readObject();}
}
調用代碼
import java.io.File; // 導入文件類,用于創建文件對象
import java.io.IOException; // 導入IOException類,處理IO操作可能出現的異常public class Xl { // 定義一個名為Xl的公共類public static void main(String[] args) throws IOException, ClassNotFoundException { // 主方法,程序入口student stu2 =new student(); // 創建一個名為stu2的學生對象Serialization_And_Unserialization s =new Serialization_And_Unserialization(); // 創建一個Serialization_And_Unserialization對象,用于進行對象的序列化和反序列化操作s.Serialize(stu2, new File("stu2.txt")); // 使用Serialize方法將stu2對象序列化并保存到名為stu2.txt的文件中Object stu3=s.Unserialize("stu2.txt"); // 使用Unserialize方法從名為stu2.txt的文件中讀取并反序列化對象,然后將其賦給stu3變量System.out.println(stu3); // 打印stu3對象}
}