1.java中的序列化
Serialization(序列化):为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来(即将对象以一连串的字节描述)
1.1序列化的方法
1.首先要让类实现Serializable序列化接口
public class Student implements Serializable{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.然后使用ObjectOutputStream 写入要序列化的对象
Student student = new Student();
student.setId(1);
student.setName("张三");
// 序列化就是将对象变为输出字节流
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("d:\\student.obj"));
os.writeObject(student);
os.close();
注意:
- 要求对象中的所有属性都是可以序列化的
- 如果某个属性不想序列化,可以在属性上加transient关键字
- 如果没有实现Serializable接口,会出现NotSerializableException异常
#2.反序列化
deserialization(反序列化):把字节序列重建成一个对象的过程。
2.1反序列化的方法
ObjectInputStream用来读取字节内容,反序列化为java对象
ObjectInputStream is = new ObjectInputStream(new FileInputStream("d:\\student.obj"));
Student s = (Student)is.readObject();
System.out.println(s.getId());
System.out.println(s.getName());
System.out.println(s.getAddress());
3.序列化和反序列化的作用
序列化和反序列化其实也是java中的一种数据传输的机制:
1. 除了可以写入和读取对象以外,还可以写入和读取基本类型(int,long,boolean…) (读取和写入的顺序要保持一致,如果不一致,出现EOFException,如果没有更多内容,也会出现EOFException)
2. 建议在写入时最后一个对象使用null,这样读取时就可以根据读取的值是否为null来判断是否读取完毕