Serializable實現了對象的序列化,方便對象數據的網絡傳輸和持久化保存。日常中不實現Serializable接口也可以將數據保存到數據庫是因爲保存的數據都爲簡單的類型,而不是自定義的類。
一. 創建User類實現Serializable接口
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = -3561365928791982079L;
private String userId;
private String username;
private Integer age;
public User(String userId, String username, int age) {
this.userId=userId;
this.username=username;
this.age=age;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
二. 編寫一個包含main方法的測試類:Main,用於測試序列化和反序列過程
import java.io.*;
public class Main {
public static void main(String[] args) {
User user=new User("123","admin",12);
try{
//1.創建OutputStream
OutputStream outputStream = new FileOutputStream("output.txt");
//2.將outputStream封裝到ObjectOutputStream對象內
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
//3.調用writeObject()即可完成對象的序列化,並將其發送給OutputStream:
objectOutputStream.writeObject(user);
//4.關閉資源
objectOutputStream.close();
outputStream.close();
System.out.println("序列化成功");
//1.創建InputStream對象
InputStream inputStream = new FileInputStream("output.txt");
//2.將inputStream封裝到ObjectOutputStream對象內
ObjectInputStream objectInputStream=new ObjectInputStream(inputStream);
// 3.調用readObject()即可完成對象的反序列化:
User user1=(User)objectInputStream.readObject();
//4.關閉資源
objectInputStream.close();
inputStream.close();
System.out.println("反序列化成功");
System.out.println("userId:"+user1.getUserId()+";"+"username:"+user1.getUsername()+";"+"age:"+user1.getAge()+"");
}catch (FileNotFoundException e )
{
e.printStackTrace();
}catch (IOException e)
{
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
}
三. 結果
序列化結果
反序列化結果