2015-05-20 147 views
0

不是已经存储为一堆字节的对象吗?序列化只是一个协议,强制通过网络传输这些字节的方式。在序列化中,将对象转换为字节流的含义是什么?

+0

那么,序列化不只是传输一个内存映像,它确实使用已知的传输顺序和协议。 [链接](http://docs.oracle.com/javase/6/docs/platform/serialization/spec/serialTOC.html)。我想你可以说“只是力量”,尽管这似乎使系列化所需的工作变得微不足道。 – markspace

回答

2

从技术上讲,是的,一台计算机中的所有东西都表示为的某处。所以任何内存中的对象都是“一堆字节”。

但是,在实时应用程序中使用时,该对象的状态可能会更改。它在不断变化。并且该状态可以被存储/更改/已知/等。跨越多种媒介。

序列化是将对象的状态捕获到某种静态形式的过程,它可以被持久化为更静态的介质。具体来说,这些信息需要包含以后重新创建对象所需的一切。

它是什么形式或媒体并不重要。数据可以是原始二进制,JSON,XML,文本,任何自定义格式等。存储介质可以是文件系统,数据库,网络连接,活动内存等等。它可以存储几毫秒或几百年。


作为一个比喻,考虑一个人。有很多信息构成了“一个人”的一切。你会如何“序列化”一个人?

你可以将他们的DNA序列保存到计算机(一个简单的字符阵列就可以实现)。但是,这是否存储该人的状态?您可以从该数据重新创建a人,但您是否可以在相同状态下重新创建同一个人?不,他们所有的回忆都会丢失。

因此,在尝试序列化此人时,我们发现代表一个人的状态的信息不仅包含用于创建此人的原始信息。该状态信息在人的寿命期间被存储在单独的介质中,并且不容易获得。但是为了序列化这个人,这是必要的。

继续比喻......考虑来自Star Trek的运输者。 “对象”是一个人,并且该人被成功转换为数据流,然后在传输的另一端重新构建该数据流。两个运输系统是分开的,只是交换信息。这些信息足以将原始对象重新创建为序列化的确切状态。

0

“序列化”意味着将对象转换为另一个状态以达到传输或持久的目的。

不是已经存储为一堆字节的对象吗?是的,但那不是重点。重点是坚持和转移。以图像为例:这是内存中的一件事,另一种保存为JPEG,另一种保存为GIF或TIFF或BMP。

序列化只是一个协议,强制某些命令如何通过网络传输时组织这些字节?请参阅关于序列化含义的第一个问题的答案

相关问题