标签: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