对象的数据
、对象的类型
和对象中存储的属性
等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。对象的数据
、对象的类型
和对象中存储的数据
信息,都可以用来在内存中创建对象。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