首页 > 代码库 > Java中实现序列化的两种方式 Serializable 接口和 Externalizable接口

Java中实现序列化的两种方式 Serializable 接口和 Externalizable接口

 

 

 

 

 

 

 

 

 

方法一:

实现Serializable接口,这个我就不多说了

 

方法二:

实现Externalizable接口:

例子:

package demo;import java.io.Externalizable;import java.io.IOException;import java.io.ObjectInput;import java.io.ObjectOutput;public class XXS implements Externalizable{    private String name;    private int age;                    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public void writeExternal(ObjectOutput out) throws IOException {        out.writeObject(this);    }    public void readExternal(ObjectInput in) throws IOException,            ClassNotFoundException {        in.readObject();    }}

测试:

import java.io.FileOutputStream;import java.io.ObjectOutputStream;public class Demo11 {        public static void main(String[] args) throws Exception {        XXS xxs=new XXS();        xxs.setName("你好");        xxs.setAge(10);                ObjectOutputStream dos=new ObjectOutputStream(new FileOutputStream("xx.txt"));        dos.writeObject(xxs);                dos.close();    }}

 

 

一些api:

Externalizable 实例类的唯一特性是可以被写入序列化流中,该类负责保存和恢复实例内容。 若某个要完全控制某一对象及其超类型的流格式和内容,则它要实现 Externalizable 接口的 writeExternal 和 readExternal 方法。这些方法必须显式与超类型进行协调以保存其状态。这些方法将代替定制的 writeObject 和 readObject 方法实现。

writeExternal(ObjectOutput out)
          该对象可实现 writeExternal 方法来保存其内容,它可以通过调用 DataOutput 的方法来保存其基本值,或调用 ObjectOutput 的 writeObject 方法来保存对象、字符串和数组。

readExternal(ObjectInput in)
          对象实现 readExternal 方法来恢复其内容,它通过调用 DataInput 的方法来恢复其基础类型,调用 readObject 来恢复对象、字符串和数组。

 

ObjectInput:

ObjectInput 扩展 DataInput 接口以包含对象的读操作。DataInput 包括基本类型的输入方法;ObjectInput 扩展了该接口,以包含对象、数组和 String 的输出方法。

 

Java中实现序列化的两种方式 Serializable 接口和 Externalizable接口