序列化和编码有什么区别?

时间:2010-09-24 04:09:50

标签: encoding service serialization

序列化和编码有什么区别? 什么时候我应该在Web服务中使用每个?

2 个答案:

答案 0 :(得分:12)

Serializing是关于以可维护结构的方式在存储/传输介质上移动结构化数据。 Encoding更广泛,比如说所述数据如何转换为不同的形式等等。也许您可以考虑在此示例中将序列化作为编码的子集。

对于Web服务,您可能会考虑序列化/反序列化某些数据以进行/接收请求/响应 - 有效地传输“消息”。编码处于较低级别,就像您的消息传递/ Web服务类型/序列化机制在幕后工作一样。

答案 1 :(得分:6)

“串行化”是将数据(可能包括数组,对象和类似结构)转换为单个字符串的过程,以便可以轻松存储或传输数据。例如,单个数据库字段无法存储数组,因为数据库引擎不了解该概念。要存储在数据库中,必须将数组分解为单个元素并存储在多个字段中(仅当元素本身不是数组或对象时才起作用),或者必须对其进行序列化才能将其存储为单个单个字段中的字符串。以后,可以从数据库中检索该字符串并对其进行反序列化,从而生成原始数组的副本。

“编码”是一个非常笼统的术语,指的是可以表示数据的任何格式,或将数据转换为特定表示的过程。

例如,在大多数编程语言中,数据元素序列可以编码为数组。 (通常,我们称数组为“数据结构”而不是“编码”,但是从技术上讲,所有数据结构也是编码。)同样,单词“ encoding”本身也可以编码为英文字母序列。这些字母本身可以被编码为书面符号,也可以被编码为诸如ASCII或UTF8之类的文本编码中的位模式。

编码过程将给定的数据转换为另一种表示形式(如果您想对此进行技术性处理,则使用另一种编码。)

您可能已经意识到,序列化是编码过程的一个示例。它将复杂的数据结构转换为单个字符序列。

然后可以将该字符序列进一步编码为某种二进制表示形式,以实现更紧凑的存储或更快的传输。我不知道BSON使用哪种形式的二进制编码,但是大概它比文本编码中使用的位模式更有效。