目录
对象流与序列化
对象流指的是可以直接把一个对象以流的形式传输给其他的介质,比如硬盘 。
ObjectOutputStream将Java 对象的基本数据类型和图形写入 OutputStream。可以使用ObjectInputStream读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。
一个对象以流的形式进行传输,叫做序列化。 该对象所对应的类,必须是实现Serializable接口。
类通过实现 java.io.Serializable 接口以启用其序列化功能。实现 Serializable 接口允许对象序列化,以保存和恢复对象的全部状态,并且允许类在写入流时的状态和从流读取时的状态之间变化。它自动遍历对象之间的引用,保存和恢复全部图形。
常用方法
ObjectInputStream:Object readObject():从 ObjectInputStream 读取对象。
ObjectInputStream(InputStream in):创建从指定 InputStream 读取的 ObjectInputStream。
ObjectOutputStream:void writeObject(Object obj):将指定的对象写入 ObjectOutputStream。
ObjectOutputStream(OutputStream out):创建写入指定 OutputStream 的 ObjectOutputStream。
示例
import java.io.*;
class Person implements Serializable{ // 标识接口
public static final long serialVersionUID=42L; // 固定标识
private String name;
transient int age; // transient关键字使堆内存中的变量不能被序列化
static String country="cn"; // 静态不能被序列化,它不在堆内存中
Person(String name,int age,String country){
this.name=name;
this.age=age;
this.country=country;
}
public String toString(){
return name+":"+age+":"+country;
}
}
/*
ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。
ObjectInputStream:Object readObject():从 ObjectInputStream 读取对象。
ObjectInputStream(InputStream in):创建从指定 InputStream 读取的 ObjectInputStream。
ObjectOutputStream:void writeObject(Object obj):将指定的对象写入 ObjectOutputStream。
ObjectOutputStream(OutputStream out):创建写入指定 OutputStream 的 ObjectOutputStream。
*/
import java.io.*;
class ObjectStreamDemo{
public static void main(String[] args)throws Exception{
// writeObj();
readObj();
}
public static void readObj()throws Exception{
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("obj.txt")); // 一般存储为"类名.object"文件
Person p=(Person)ois.readObject();
System.out.println(p);
ois.close();
}
public static void writeObj()throws Exception{
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("obj.txt")); // 一般存储为"类名.object"文件
oos.writeObject(new Person("lisi0",399,"kr")); // 在Person类中使用了transient、static关键字使age与country不能被序列化。
oos.close();
}
}