用不同语言编写的两个程序之间的通信 - 序列化?

标签 c flash serialization rmi corba

驻留在两台不同机器/网络/Internet 上的程序之间的通信过程中何时需要序列化、编码等?

假设我有一个java/flash的客户端程序和一个C语言的服务器程序,我不能使用自己的自定义协议(protocol)来实现通信吗?大概吧。什么时候需要序列化等?我知道Java RMI、CORBA 等都有这些机制。但为什么?是必须的吗?请赐教?

最佳答案

程序中的对象具有由编译器强加的明确定义的内存布局。但是,在另一台机器上运行、由不同编译器编译的另一个程序中,该布局不会完全相同。而且它通常与传输介质(例如网络连接或文件)不太兼容。您需要注意将对象从一台机器传输到另一台机器。

文件和网络数据包是简单的字节流。这就是序列化发挥作用的地方,您需要将内存中的对象序列化为字节流。并且需要在接收端进行反序列化,从字节流返回到对象。

最明显的方法是二进制序列化。您获取对象中每个字段的字节并将它们写入流。效率很高,但也很麻烦。您遇到的第一个问题是接收端对对象的外观有不同的想法。它可能使用不同版本的对象声明进行编译,例如添加了字段的版本。当对象在不同机器之间交换时,问题更加明显。他们对于整数中的字节数可能有非常不同的想法。或字节顺序(字节顺序)。

这个问题有很多解决方案。它们通常涉及某种描述对象中字段的元数据。 Unicode 的出现使得将元数据和字段值放入文本描述中成为可能,XML 就是最好的例子。

关于用不同语言编写的两个程序之间的通信 - 序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2660976/

相关文章:

c - 是否可以在 gcc 纯 C 中取消 const typeof?

C - 字符数组的截断安全吗?

symfony - JMSSerializerBundle 上的自定义处理程序被忽略

c - 使用 mbed 框架在 STM32 上运行 GMP 的串行 printf

c - 尝试在 makefile 中复制 2 个依赖项

javascript - 使用 greasemonkey 脚本自动化 flash 应用程序

flash - 在 AS3 中快速设置关键帧上的实例名称

javascript - 在 IE 7 中强制重绘 Flash 内容

android - @SerialVersionUID "lost"在 Android 上?

c# - xml序列化——改变xml的序列化类型