什么是对象编组?

Bri*_*n G 49 glossary terminology marshalling

我听过这个经常使用的概念,但我对它的内容并没有很好的掌握.

Adr*_*ian 35

将内存中的对象转换为可写入磁盘或通过线路发送的格式等.

维基百科的描述.

  • 显然这就是'序列化'的定义; 'marshalling'略有不同:http://stackoverflow.com/questions/770474/what-is-the-difference-between-serialization-and-marshalling (17认同)

GEO*_*HET 33

我不同意,维基百科对此很清楚.

在计算机科学中,编组(类似于序列化)是将对象的存储器表示转换为适合于存储或传输的数据格式的过程.它通常在数据必须在计算机程序的不同部分之间或从一个程序移动到另一个程序时使用.

http://en.wikipedia.org/wiki/Marshalling_(computer_science)

  • 你有什么不同意的? (25认同)
  • @david:Defintion!=实施. (2认同)

Alv*_*vin 11

人们已经非常明确地定义了编组,所以我将跳过定义并跳转到一个例子.

远程过程调用使用编组.在调用远程函数时,您必须将参数编组为某种标准格式,以便可以通过网络传输.


Fir*_*aad 5

编组是将对象的内存表示转换为可以存储或传输的数据格式的过程。它也称为序列化(尽管在某些情况下可能会有所不同)。对象的内存表示可以存储为二进制或 XML 或任何适合存储和/或传输的格式,以允许您解组它并取回原始对象。

举个例子,如果你有一些带有客户端和服务器组件的在线游戏,并且你想将包含玩家统计数据和世界坐标的玩家对象从客户端发送到服务器(或其他方式),你可以简单地编组它在客户端,通过网络发送,并在另一端解组它,它会出现在服务器上,好像对象是在服务器本身上创建的。这是一个红宝石示例:

srcplayer = Player.new
# marshal (store it as string)
str = Marshal.dump(srcplayer)
#unmarshal (get it back)
destplayer = Marshal.load(str)
Run Code Online (Sandbox Code Playgroud)