序列化与反序列化处理
有了序列化的支持类之后如果想实现序列化与反序列化的操作则可以利用以下两个类完成:
类名称 | 序列化:ObjectOutputSteam | 反序列化:ObjectIntputStream |
类定义 | public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants |
public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants |
构造方法 | public ObjectOutputStream(OutputStream out) throws IOException |
public ObjectInputStream(InputStream in) throws IOException |
操作方法 | public final void writeObject(Object obj) throws IOException |
public final Object readObject() throws IOException, ClassNotFoundException |
范例:实现序列化与反序列化
package 序列化;
import java.io.*;
public class 序列化的基本概念{
private static final File SAVE_FILE = new File("D:\\Test\\person.person");
public static void main(String[] args) throws Exception{
//序列化,完成后生成person.person文件
saveObject(new Person("张三",18));
//反序列化
System.out.println(loadObject());
}
public static void saveObject(Object obj) throws Exception{
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(SAVE_FILE));
objectOutputStream.writeObject(obj); //序列化
objectOutputStream.close();
}
public static Object loadObject() throws Exception{
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(SAVE_FILE));
Object obj = objectInputStream.readObject(); //反序列化
objectInputStream.close();
return obj;
}
}
class Person implements Serializable{ //Person类可以被序列化
private String name;
private int age;
public Person(String name,int age){
this.name = name ;
this.age = age;
}
@Override
public String toString(){
return "姓名:"+this.name+"、年龄:"+this.age;
}
}
姓名:张三、年龄:18
在java中的序列化和反序列化必须使用内部提供的对象操作流,因为这里面牵扯到二进制数据的格式,所以不能自定义处理,如果要想实现一组对线的序列化,则可以使用对象数组完成。
在很多实际项目的开发过程中,开发者很多少能够见到这两个类,因为很多容器帮助开发者自动实现。