Java程序猿之对象序列化(26)

来源:互联网 发布:可可粉推荐知乎 编辑:程序博客网 时间:2024/06/10 12:47
这一章竹迩想带大家来看看对象序列化;

先回到对象的模型:堆栈模型;
 
对象被创建出来是被放在堆栈中的,而堆栈又是属于Java运行内存时的一块区域;这意味着什么呢?

意味着只有当JVM运行时,内存这个区域才会打开装载对象,而当JVM运行结束,也就是程序运行结束,一切归零,所有数据将被赶出JVM内存,对象将不复存在;

如果你是在打游戏,那就必须有存储和恢复游戏的功能,也就是游戏中的各个对象状态需要保存;对象序列化就是为了在JVM停止运行后能够保存对象而诞生的;

什么是对象序列化?

堆上的对象                        序列化的对象
 
这就是对象序列化;堆上的对象在创建时有状态,从而具备一定的形态;序列化得对象保存了状态值后被序列化存储,因此之后可以在堆上带回一模一样的对象;

而反序列化就是将序列化得对象恢复的过程;

对象序列化与文件IO

对象序列化就是将对象在文件中进行保存,从而在下一次读取文件时可以恢复原始对象状态;从而其实也是需要连通程序和文件的管道;
 
而在这跟管道上因为要传递的不是普通的流,而是对象流;就像热水管道要包装保温层一样,对象管道要包装对象处理的层;所以在连通管道外面要使用对象管道装饰一下;
 
对象序列化的实现

实现图中所示的过程:

  • 连通程序和文件管道--FileOutputStream
  • 处理对象流的包装管道--ObjectOutputStream

具体代码过程如下:
  1. public static void main(String[] args) throws IOException {
  2.                 //要被序列化的对象
  3.                 Object obj = new Object();
  4.                 //连通程序到文件的管道
  5.                 FileOutputStream fo = new FileOutputStream("c:\\test.txt");
  6.                 //将普通管道传递给对象管道包装一下
  7.                 ObjectOutputStream oos= new ObjectOutputStream(fo);
  8.                 //实现对象序列化
  9.                 oos.writeObject(obj);
  10.                 //流的关闭
  11.                 oos.flush();
  12.                 oos.close();
  13.         }

0 0
原创粉丝点击