在计算机科学中,列集(Marshalling,有时也写作Marshaling)是将一个对象的内存表示(memory representation)变换到一种适合存储或传输的数据格式的过程。它经常被用于当数据必须要在计算机程序的不同部分之间,或者是一个程序到另一个程序之间传送的时候。列集与序列化(serialization)相似,用于某个对象和远程对象之间的通信。它简化了复杂的通信。[1]
COM中的列集编辑
在微软的COM(组件对象模型)中,列集是将参数打包与解包,使得远程过程(remote procedure)可以进行的过程。[2] 当接口指针要跨越COM单元(apartment)边界(也就是在COM库的实例之间跨越)时,必须要对其进行列集操作。[1]
不同的参数以不同的方式进行列集。例如列集一个整形参数只需要简单地将这个值复制到消息缓存中(即便是这么一个简单的例子,也可能存在着跨计算机时需要处理的字节顺序)。列集一个数组是一个更复杂的过程。数组成员被以特定的顺序复制,从而使另一端可以精确地重构数组。[2]
对于标准的列集方法(standard marshaling),代理对象(proxy)和存根代码(stub)对于接口来说都是系统宽度(systemwide)的资源,并且它们使用遵循标准协议的通告进行交互与通信。
除了标准列集法还有另一个选择,那就是自定义的列集方法(custom marshaling)。对于任何一个给定的接口,对象可以选择COM提供的标准列集法或者是自定义列集法。一旦为给定的接口做出选择,这种选择将在一个对象的生命周期里一直保持不变。