为什么我们使用序列化?

时间:2012-09-07 12:27:19

标签: serialization

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

5 个答案:

答案 0 :(得分:32)

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

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

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

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

希望这有帮助。

答案 1 :(得分:9)

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

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

更多信息on wikipedia

答案 2 :(得分:4)

序列化是将对象转换为流的过程,以便可以将其保存在任何物理文件(如XML)中,也可以保存在数据库中。 C#中序列化的主要目的是持久化对象并将其保存在任何指定的存储介质中,如流,物理文件或数据库。

答案 3 :(得分:2)

一般来说,序列化是一种持久化对象状态的方法,但我建议你阅读这个wiki页面,在我看来它非常详细和正确:

http://en.wikipedia.org/wiki/Serialization

答案 4 :(得分:1)

引自 Designing Data Intensive Applications 本书:

<块引用>

程序通常处理(至少)两个不同的数据 陈述:

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