您的位置:首页 > 编程语言 > Java开发

java中序列化与反序列化对象的简单操作!

2013-10-09 15:23 316 查看
序列化分为两个步骤:

1.建立ObjectOutputStream输出流对象,该对象需要建立在一个文件输出流上,如FileOutputStream。

2..利用该对象的writeobject(object obj)方法即可将序列化后的对象写入文件。

//序列化的对象需要实现serializable接口,但是不用实现任何方法
public class MyClass implements java.io.Serializable {
private String myName;
private int myAge;
public MyClass(String name,int age){
this.myName=name;
this.myAge=age;
}
public void showInfo(){
System.out.println(this.myName+"年龄为:"+this.myAge);
}
}


public static void main(String[] args){
//序列化:
//该对象可将序列化后的实例写入磁盘文件
//ObjectOutputStream输出流需要建立在一个文件输出流的基础上
ObjectOutputStream oos=null;
try{
//创建一个输出流
oos=new ObjectOutputStream(new FileOutputStream("serializable.txt"));
oos.writeObject(new MyClass("fly",24));//将MyClass对象写入至输出流
}
catch(IOException ex){
ex.printStackTrace();
}
finally{
if(oos!=null){
try{
oos.close();
}
catch(IOException ex){
ex.printStackTrace();
}
}
}


反序列化与之相反:

1.建立一个ObjectIntputStream输入流对象,该对象需要建立在一个文件输入流上,如FileInputStream。

2..利用该对象的readobject(filename)方法即可将文件文件中的二进制对象读取至内存中,通过强转获取恢复该对象。

//反序列化:
ObjectInputStream ois=null;//输入流

try {
ois=new ObjectInputStream(new FileInputStream("serializable.txt"));
MyClass myClass= (MyClass)ois.readObject();
myClass.showInfo();
}
catch (Exception ex) {
ex.printStackTrace();
}
finally{
if(ois!=null){
try{
ois.close();
}
catch(IOException ex){
ex.printStackTrace();
}
}
}


输出:fly年龄:24

总结:

1.若需要序列化的类中含有引用对象,则该对象必须也实现serializable,即可序列化。

2.java序列化机制不会将同一引用对象重复序列化,若发现该对象已经被序列化了,则下次不会序列化。如

MyClass m=new MyClass();

oos.writeObject(m);

oos.writeObject(m);

并不会序列化两次m对象,在输出的二进制文件中只有一个对象。因此不要在序列化后修改该对象的值,因为即使修改了值然后再次序列化,还是不会输出至文件中(仍然是同一对象)。

3.反序列化时一定要按照序列化时的顺序进行读取。

4.若不希望序列化某个字段则可再该字段前夹transient.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: