如果所有内容都已存储为位,为什么我们需要序列化?

Why do we need serialization if everything is already stored as bits?

来自https://docs.oracle.com/javase/tutorial/jndi/objects/serial.html

To serialize an object means to convert its state to a byte stream so that the byte stream can be reverted back into a copy of the object.

既然所有内容都以 0 和 1 的形式存储在内存中,为什么还需要将对象解构为可以通过流传输的形式?为什么现有的状态还不够好传输?

如果你找到 01000001,你怎么知道它是数字 65 还是 A 的 ASCII?或者也许是 wav 文件中的频率?它可能是位图中的颜色信息。
信息的解读方式有很多种。您必须为接收者提供一种解释信息的方式。我的第一个例子可能有点傻。相反,将 CSV 文件与 JSON 文件进行比较。尝试在 CSV 中重新创建 JSON 结构。不会好看的
Java 的序列化背后也存在相同的逻辑。你怎么知道 class 定义是什么样子的?

主要原因:表示一个实例的数据不连续。

To serialize an object means to convert its state to a byte stream so that the byte stream can be reverted back into a copy of the object.

主要关键词是“字节流”,意思是字节序列。

您的方法符合 Pascal 和 C 等语言的概念,其中大多数数据结构最终都表示为 连续 字节块。

使用像 Java 这样的语言,实例字段通常不包含字段值,而是引用包含值的其他实例或引用更多实例,等等。即使是只有一个 String 字段的简单 class 也会(至少)出现三个不同的实例:

  • 主实例,包含对字符串的引用。
  • 一个String实例,引用了字符数组,
  • 一个 char[] 数组保存字符串的内容。

并且无法保证这些实例位于内存中的任何位置,很可能不在连续的位置。因此,内存中表示确实由字节组成,但不是按顺序排列。

这就是我们谈论“序列化”的原因,这个过程从更类似于相互关联的元素网络的东西中创建串行字节流。