序列号


      引:Java支持序列化机制,它可以将任何对象写出到输出流中,并在之后将其读回。但是,有一种重要的情况需要考虑:当一个对象被多个对象共享,作为他们各自状态的一部分时,会对序列化反序列化造成什么影响呢?
ps:为了更清楚的理解以下知识,首先要对 类,对象,引用,序列化与反序列化的概念有着清晰的认识 

序列号是什么

每个被序列化的对象都拥有一个序列号,这也是这种机制被称为序列化的原因。

序列化和反序列化的具体过程

写出对象:
  • 对你遇到的每一个对象引用都关联一个序列号
  • 对于每个对象,当第一次遇到时,保存其对象数据到输出流中
  • 如果某个对象之前已经被保存过,那么只写出“与之前保存过的序列号为X的对象相同”作为标记

读回对象:
//在读回对象时,整个过程是反过来的
  • 对于对象输入流中的对象,在第一次遇到其序列号时,构建它,并使用流中的数据来初始化它,然后记录这个序列号和新对象之间的关联
  • 当遇到“与之前保存过的序列号为X的对象相同”标记时,获取与这个顺序号相关联的对象引用

序列号的作用

当一个对象被多个对象共享,保存这样的对象网络是一种挑战,我们当然不可能去保存和恢复这个对象网络的内存地址,因为当对象被重新加载时,它可能占据的是与原来不同的内存地址。

让每个对象都用序列号来保存解决了这个问题,因为序列号代替了内存地址(正如在文件中保存原生的内存地址毫无意义一样,这些地址对于在不同的处理器之间的通信也是毫无意义的),所以同时它也允许了将对象集合从一台机器传送到另一台机器。

总结

本文之作学习交流之用,转载请注明出处。

Comments

Popular posts from this blog

抓包工具Wireshark下载及安装教程

HTTP协议特性

Java中Synchronized的用法