ObjectInputStream 和 ObjectOutputStream(对象的序列化、持久化)

来源:互联网 发布:网络爬虫书籍推荐 编辑:程序博客网 时间:2024/04/30 12:13

将堆内存中的对象存储在硬盘上

被持久化的对象必须实现了Serializble接口

write() 和 writeInt()区别:前者只存储的int的最低8位,后者存储int的4个8位全显示。


没有方法的接口称之为 标记接口,相当于把实现它的类标注一下。


Serializble接口下只有一个常量:serialVersionUID 用于实现它的子类分配一个UID,这个UID和保存在硬盘的对象的UID是一个。UID的产生是由类中的成员组成的。比如:Person类extends于Serializble接口,然后保存一个p1对象在硬盘上,这时p1对象和Person类的UID是一致的。如果在后面修改Person类的成员,下次再用Perosn类去引用p1对象时就会报错。

例:

Person.java

import java.io.Serializable;public class Person implements Serializable{static final longserialVersionUID= 42L;// 手动将serialVersionUID的值固定,更改类成员也不会改变其值Stringname;transient intage;// 如果不想将某个成员序列化,就加transientstatic Stringcountry= "cn"; // 静态是不能被序列化的public Person(String name, int age){// TODO Auto-generated constructor stubthis.name = name;this.age = 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;}@Overridepublic String toString(){// TODO Auto-generated method stubreturn name + ":" + age + ":" + country;}}

ObjectDemo.java

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class ObjectDemo{/** * @param args */public static void main(String[] args) throws Exception{writeObj();readObj();}public static void readObj() throws Exception{ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\tmp\\obj.txt"));Person p = (Person) ois.readObject();System.out.println(p);ois.close();}public static void writeObj() throws Exception{ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\tmp\\obj.txt"));oos.writeObject(new Person("zhangsan", 30));oos.close();}}


原创粉丝点击