封送处理程序和序列化程序之间有什么区别?


20

...以及解组/反序列化?维基百科的解释让我一无所获!我是一名Java程序员,以防在不同语言中使用不同的术语。

Answers:


30

语义在这里很重要:

编组意味着移动数据,而不意味着从其原始表示形式或存储中转换数据。Java对象可以以其本机表示形式通过网络编组。

序列化意味着数据转换为某些非本地中间表示。例如:将Java对象转换为JSON或XML。

当然,大多数封送数据的系统会在传输数据之前将其序列化为某些非本机格式。


13

之前已经问过这个问题,但是在StackOverflow上已经问过。是链接。

Jeffrey Hantin给出的答案语录:

在远程过程调用的上下文中,封送处理和序列化是松散的同义词,但就意图而言在语义上有所不同。

特别地,封送处理是关于从此处获取参数,而序列化是关于将结构化数据复制到原始形式(例如字节流)或从原始形式复制数据。从这个意义上讲,序列化是执行封送处理的一种方法,通常实现按值传递语义。

还可以通过引用将对象编组,在这种情况下,“在线”数据仅仅是原始对象的位置信息。但是,这样的对象可能仍然适合于值序列化。

正如@Bill所提到的,可能存在其他元数据,例如代码库位置甚至对象实现代码。


2

马歇尔(Marshaller)做任何需要做的事情,以铸造要从一个地方传输到另一个地方的数据结构。当我谈论“数据结构”时,它可以是任何东西。从对象本身(状态数据=>字段值)到对该对象的内存引用,客户端将通过“存根”处理该引用,在服务器端通过“代理”处理。这意味着Marshaller可以使用“序列化器”将数据结构转换为更易于传输的低级表示形式。转换路径可能具有其他组件,例如压缩器,编译器,适配器等。对我来说,序列化器是Marshaller的一部分。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.