Java IO教程 - Java对象序列化
ObjectOutputStream类的一个对象用于序列化一个对象。
ObjectInputStream类的一个对象用于反序列化一个对象。
ObjectOutputStream继承自OutputStream。 ObjectInputStream继承自InputStream。
类必须实现Serializable或Externalizable接口以便序列化或反序列化。
Serializable接口是一个标记接口。
如果我们想要一个Person类的对象被序列化,我们需要声明Person类如下:public class Person implements Serializable {
}
Java负责处理从/向流读取/写入Serializable对象的细节。我们只需要将对象写入/读取流到流类中的一个方法。
实现Externalizable接口使我们能够更好地控制从流中读取和写入对象。
它继承Serializable接口。它声明如下:public interface Externalizable extends Serializable {
void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
void writeExternal(ObjectOutput out) throws IOException;
}
当我们从流中读取一个对象时,Java调用readExternal()方法。当我们向一个流写一个对象时,它调用writeExternal()方法。
我们必须编写逻辑来分别读取和写入readExternal()和writeExternal()方法中的对象的字段。
实现Externalizable接口的类如下所示:public class Person implements Externalizable {
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
// Write the logic to read the Person object fields from the stream }
public void writeExternal(ObjectOutput out) throws IOException {
// Write the logic to write Person object fields to the stream }
}
序列化对象
以下代码创建ObjectOutputStream类的对象,并将对象保存到person.ser文件。ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"));
要将对象保存到ByteArrayOutputStream,我们构造一个对象输出流如下