您的位置:首页 > 移动开发 > Objective-C

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

2012-07-13 20:48 639 查看
将堆内存中的对象存储在硬盘上

被持久化的对象必须实现了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 long	serialVersionUID	= 42L;	// 手动将serialVersionUID的值固定,更改类成员也不会改变其值

String				name;

transient int		age;						// 如果不想将某个成员序列化,就加transient

static String		country				= "cn"; // 静态是不能被序列化的

public Person(String name, int age)
{

// TODO Auto-generated constructor stub
this.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;
}

@Override
public String toString()
{

// TODO Auto-generated method stub
return 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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐