为什么我们使用序列化?

Rik*_*ika 30 serialization

为什么我们需要使用序列化?
如果我们想通过网络发送一个对象或一块数据我们可以使用字节流.
如果我们想将一些数据保存到磁盘我们可以再次使用二进制模式和字节流并保存它.
那么使用序列化的优势是什么?

nic*_*noe 32

从技术上讲,在低级别,您的序列化对象也将最终作为您的电缆或文件系统上的字节流...

因此,您也可以将其视为将对象转换为字节流的标准化且已有的方法.存储/传输对象是一个非常普遍的要求,在每个应用程序中重新发明这个轮子的意义不大或很小.

正如其他人所提到的,您也知道这个对象 - > stream_of_bytes实现非常强大,经过测试,并且通常与架构无关.

这并不意味着它是保存或传输对象的唯一可接受的方式:在某些情况下,您必须实现自己的方法,例如为了避免保存不必要的/私有成员(例如出于安全或性能原因).但是如果你处于一个简单的案例中,那么通过使用框架,语言或VM的序列化/反序列化而不必自己实现它,可以使您的生活更轻松.

希望这可以帮助.


小智 14

引自Designing Data Intensive Applications书中:

\n
\n

程序通常使用(至少)两种不同\n表示形式的数据:

\n
    \n
  1. 在内存中,数据保存在对象、结构、列表、数组、哈希表、树等中。这些数据结构针对 CPU 的高效访问和操作进行了优化(通常使用指针)。
  2. \n
  3. 当您想要将数据写入文件或通过网络发送数据时,必须将其编码为某种独立的字节序列\n(例如,JSON 文档)。由于指针对任何其他进程都没有意义,因此这种字节序列表示看起来与内存中通常使用的数据结构完全不同。因此,我们需要在它们之间进行某种转换两个\n表示。从内存表示到字节序列的转换称为编码(也称为序列化或编组),相反的称为解码(解析、反序列化、反编组)。
  4. \n
\n
\n


Bgi*_*Bgi 9

在架构之间兼容的其他原因.整数从一个体系结构到另一个体系结构的字节数不同,有时从一个编译器到另一个编译器.

而你所谈论的仍然是序列化.二进制序列化.您将对象的所有字节放在一起以便存储它们,并能够在以后将它们重新转换为对象.这是序列化.

关于维基百科的更多信息