个人学习摘抄与反思总结
via:徐刘根 https://blog.youkuaiyun.com/xlgen157387/article/details/79840134
序列化和反序列化的方法
实现了Serializable 或 Externalizable 接口才能被序列化,否则将会抛出异常。
- 若一个实现了Serializable接口的类对象需要被序列化,则可以通过ObjectOutputStream、ObjectInputStream采用默认的序列化方式,对对象的非transient的实例变量进行序列化和反序列化;若其定义了 readObject(ObjectInputStream in) 和 writeObject(ObjectOutputSteam out),则ObjectOutputStream、ObjectInputStream将分别调用相应方法直接进行序列化和反序列化。
- 若一个类实现的是Externalizable接口,则必须实现 readExternal(ObjectInput in) 和 writeExternal(ObjectOutput out) 方法,ObjectOutputStream、ObjectInputStream将通过分别调用该方法的方式分别实现序列化和反序列化。
序列化:
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\object.out"));
oos.writeObject(new User("xuliugen", "123456", "male"));
反序列化:
ObjectInputStream ois= new ObjectInputStream(new FileInputStream("object.out"));
User user = (User) ois.readObject();
JDK类库中用于序列化和反序列化的API:
java.io.ObjectOutputStream 对象输出流。通过writeObject(Object obj)方法对指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中;
java.io.ObjectInputStream 对象输入流。通过readObject()方法从源输入流中读取字节序列,再把它们反序列化成为一个对象,并返回。