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

有帮助吗?

解决方案

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

维基百科的描述

其他提示

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

  

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

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

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

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

我澄清了谷歌搜索“数据编组”的说法。第一个打击是在某个名为webopedia的地方,这非常好。要点是,您可以来回转换数据,以便通过网络传输。它解决的问题是您无法通过网络以程序可用的形式传输数据。您必须解决许多问题,包括数据的字节顺序,如何存储字符串等复杂数据类型等。

编组不仅仅是解决网络传输问题,还有其他问题,例如从一个架构转到另一个架构,可能是不同的语言,特别是那些可能使用虚拟机之类的问题,以及其他“翻译”问题。问题。

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

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

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

编组是跨应用程序边界或不同数据格式之间传输数据的过程。编组是非常常见的,例如将数据写入磁盘或数据库在技术上是编组,但是该术语倾向于用于描述“外来”数据的转换。 API或进程间通信。

例如,在.NET中,托管代码和非托管代码之间的通信(例如访问某些win32 API)可能需要编组才能在托管C#对象和C / C ++样式对象(结构,句柄,输出缓冲区等。)静态 Marshal的帮助课程可能会有所帮助。

基本上它是一个表达式,用于将对象(或类似物)一般转换为另一种表示形式(例如)可以通过线路发送或存储到磁盘(通常是字符串或二进制流。相反,解组,描述相反的方向)读取编组表示并重新创建一个对象或之前存在的任何内存结构。

另一个当前的日常例子是JSON

在编程中非常一般意义上,它只是意味着以一种格式获取数据并将其转换为其他子系统可接受的格式。

这意味着将任何数据转换为另一种数据类型以转移到另一个系统。

例如,将结构编组到XML文档中以发送到Web服务,或者编组指针以发送到不同的线程单元。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top