Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.对象的序列化与反序列化
ObjectOutputStream流用于将对象保存在磁盘中,或者通过网络传输到另一台主机上。保存在文件中的对象的二进制流可以用ObjectInputStream流在以后被还原成原来的对象。
对象输出流的对象可以永久的保存在磁盘上,使对象可以脱离程序而存在,此过程也称为“序列化”过程,反之,将磁盘的数据加载到内存中的就称为“反序列化”过程。换句话说,对象中的数据以流的形式写入到文件中保存的过程称为写出对象,也叫对象的序列化,在文件中以流的形式将对象读取出来,读取对象的过程也叫反序列化。
注意:反序列化是不走构造方法的哟!
二.ObjectOutputStream流写对象
类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。
接下来我们定义一个实现Serializable类接口如下:
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note6; 8 9 import java.io.Serializable; 10 11 public class Person implements Serializable{ 12 private String Name; 13 private int Age; 14 public Person(String name, int age) { 15 super(); 16 Name = name; 17 Age = age; 18 } 19 20 public String getName() { 21 return Name; 22 } 23 24 public void setName(String name) { 25 Name = name; 26 } 27 28 public int getAge() { 29 return Age; 30 } 31 32 public void setAge(int age) { 33 Age = age; 34 } 35 36 @Override 37 public String toString() { 38 return "Person [姓名=" + Name + ",年龄=" + Age+ "]"; 39 } 40 }