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();
}
}