Java序列化與反序列化講解
阿新 • • 發佈:2018-11-30
1、什麼是Java序列化和反序列化?
Java序列化是指把Java物件轉換為位元組序列的過程;而Java反序列化是指把位元組序列恢復為Java物件的過程。
2、為什麼要使用序列化和反序列化?
當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種型別的資料,都會以二進位制序列的形式在網路上傳送。傳送方需要把這個Java物件轉換為位元組序列,才能在網路上傳送;接收方則需要把位元組序列再恢復為Java物件。
3.如何實現Java序列化與反序列化
ObjectOutputStream:表示物件輸出流
ObjectInputStream:表示物件輸入流
4.舉例說明
//只有實現了Serializable或Externalizable介面的類的物件才能被序列化,否則丟擲異常。
package com.mytest.main; import java.io.Serializable; public class Student implements Serializable{ /** * 不想將某屬性序列化的話,可以用transient修飾 * 如下:private transient String as; */ private String name; private int age; public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } }
//序列化方法
//反序列化方法private static void setSerializable() { Student student=new Student("落雨敏", 20); try { File file=new File("E:/Test/user.txt"); if(!file.exists()){ file.createNewFile(); } //序列化過程 FileOutputStream os=new FileOutputStream(file); ObjectOutputStream oos=new ObjectOutputStream(os); oos.writeObject(student); oos.flush(); oos.close(); os.close(); System.out.println("序列號成功"); } catch (IOException e) { e.printStackTrace(); } }
private static void getSerializable() {
try {
File file=new File("E:/Test/user.txt");
if(!file.exists()){
System.out.println("沒有發現檔案");
return ;
}
//反序列化過程
FileInputStream is=new FileInputStream(file);
ObjectInputStream ois=new ObjectInputStream(is);
Student student=(Student) ois.readObject();
ois.close();
is.close();
System.out.println("反序列:"+student);
}
catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}