1、概念序列化:把对象从内存中,变成可传输(如网络传输)、可存储(如存储到硬盘)为字节序列的过程
反序列化:把字节序列恢复到内存的过程字节序列:包括该对象的数据,对象的类型信息,存储在对象的数据类型
2、序列化的条件
类的对象序列化需要满足两个条件该类必须实现 java.io.Serializable 对象。
该类的所有属性必须是可序列化的。如果有一个属性不是可序列化的,则该属性必须注明是短暂的(通过 transient关键字声明)。
如果你想知道一个 Java 标准类是否是可序列化的,请查看该类的文档。检验一个类的实例是否能序列化十分简单, 只需要查看该类有没有实现 java.io.Serializable接口。
3、实现序列化通过ObjectInputStream 和 ObjectOutputStream 进行对象的读写
代码:代码包括三个类,User,SerializeDemo,DeserializeDemo类
User类代码:实体类需要实现Serializable序列化类
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String name;
private int age;
//省略get,set方法
}SerializeDemo序列化类:将序列化后的User对象写到硬盘 E:/user.ser 文件中
public class SerializeDemo {
public static void main(String[] args) {
User user = new User();
user.setId(1);
user.setName("van");
user.setAge(18);
try {
FileOutputStream fileOut = new FileOutputStream("E:/user.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(user);
out.close();
fileOut.close();
System.out.println("Serialized data is saved in E:/user.ser");
} catch (Exception e) {
e.printStackTrace();
}
}
}DeserializeDemo反序列化类:从硬盘E:/user.ser 文件中获取User对象
public class DeserializeDemo {
public static void main(String[] args) {
User user = null;
try {
FileInputStream fileInputStream = new FileInputStream("E:/user.ser");
ObjectInputStream inputStream = new ObjectInputStream(fileInputStream);
user = (User) inputStream.readObject();
inputStream.close();
fileInputStream.close();
System.out.println("Deserialize User : ");
System.out.println("id : " + user.getId());
System.out.println("name : " + user.getName());
System.out.println("age : " + user.getAge());
} catch (Exception e) {
e.printStackTrace();
}
}
}
DeserializeDemo反序列 运行结果:
4、总结
github 代码地址:caov/Blog
由于本人知识水平有限,文章中倘若有错误的地方 ,欢迎留言