本帖最后由 马纵驰 于 2012-12-4 13:21 编辑
对象的序列化:目的:将一个具体的对象进行持久化,写入到硬盘上。
注意:静态数据不能被序列化,因为静态数据不在堆内存中,是存储在静态方法区中。
如何将非静态的数据不进行序列化?用transient 关键字修饰此变量即可。
Serializable:用于启动对象的序列化功能,可以强制让指定类具备序列化功能,该接口中没有成员,这是一个标记接口。这个标记接口用于给序列化类提供UID。这个uid是依据类中的成员的数字签名进行运行获取的。如果不需要自动获取一个uid,可以在类中,手动指定一个名称为serialVersionUID id号。依据编译器的不同,或者对信息的高度敏感性。最好每一个序列化的类都进行手动显示的UID的指定。
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 obj = ois.readObject();// 读取一个对象。
System.out.println(obj.toString());
}
public static void writeObj() throws IOException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
"obj.txt"));
oos.writeObject(new Person("lisi", 25)); // 写入一个对象。
oos.close();
}
}
class Person implements Serializable {
private static final long serialVersionUID = 42L;
private transient String name;// 用transient修饰后name将不会进行序列化
public int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + "::" + age;
}
}
|