标签:javase io流 序列化 反序列化 serializable
序列化机制允许将实现序列化的Java对象转换为字节序列,这些字节序列可以被保存在磁盘上,或通过网络传输,以备以后重新恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。
对象的序列化(Serialize)指将一个Java对象写入IO流中,与此对应的是,对象的反序列化(Deserialize)则指从IO流中恢复该Java对象。如果需要让某个对象可以支持序列化机制,必须让它的类是可序列化的(serializable),为了让某个类是可序列化的,该类必须实现如下两个接口之一:
(1)Serializable(2)调用ObjectInputStream对象的readObject对象读取流中的对象,该方法返回一个Object类型的Java对象,如果程序知道该Java对象的类型,则可以将该对象强制类型转换成其真实的类型。
下面仅以实现Serializable接口为例,以一个完整的实例演示序列化与反序列化的过程:
1. Person.java
import java.io.Serializable;
public class Person implements Serializable
{
private String name;
private int 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;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
}import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class WritePerson {
public static void main(String[] args)
{
//创建ObjectOutputStream(处理流,必需建立在其他节点流之上)对象
try {
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("per.txt"));
Person per=new Person("张三",18);
oos.writeObject(per);
oos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}public class ReadPerson {
public static void main(String[] args) {
try(ObjectInputStream ois=new ObjectInputStream(new FileInputStream("per.txt")))
{
Person per=(Person)ois.readObject();
System.out.println(per.getName()+"-----------"+per.getAge());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
标签:javase io流 序列化 反序列化 serializable
原文地址:http://blog.csdn.net/sinat_26342009/article/details/45743289