对象的数据、对象的类型和对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。对象的数据、对象的类型和对象中存储的数据信息,都可以用来在内存中创建对象。ObjectOutputStream:对象的序列化流ObjectInputStream:对象的反序列化NotSerializableException 没有序列化异常:
java.io.Serializable 接口来启动其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化public ObjectOutputStream(OutputStream out) : 创建一个指定OutputStream的ObjectOutputStream。void writeObject(Object obj) : 将指定的对象写入 ObjectOutputStream。public class Person implements Serializable {
private String name;
private int age;
...
}
public class Demo {
public static void main(String[] args) throws IOException {
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("D:\\document\\code\\xuexi\\java\\aaa\\a.txt"));
oos.writeObject(new Person("王二",90));
oos.close();
}
}
public ObjectInputStream(InputStream in) : 创建一个指定InputStream的ObjectInputStream。Object readObject() :从 ObjectInputStream 读取对象。ClassNotFoundException(class文件找不到异常)
public class Demo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("D:\\document\\code\\xuexi\\java\\aaa\\a.txt"));
Object o = ois.readObject();
ois.close();
System.out.println(o);//Person{name=‘王二‘, age=90}
}
}
InvalidClassException异常。Serializable 接口给需要序列化的类,提供了一个序列版本号。serialVersionUID 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。static final long serialVersionUID = 42L;常量,不能改变public class Employee implements java.io.Serializable {
// 加入序列版本号
private static final long serialVersionUID = 1L;
public String name;
public String address;
// 添加新的属性 ,重新编译, 可以反序列化,该属性赋为默认值.
public int eid;
public void addressCheck() {
System.out.println("Address check : " + name + " -- " + address);
}
}
java IO流: 序列化ObjectOutputStream/反序列化ObjectInputStream
原文:https://www.cnblogs.com/wu-myblog/p/14252960.html