【问题标题】:serialization concept- java - C#序列化概念 - java - C#
【发布时间】:2012-02-18 15:38:34
【问题描述】:
我正在尝试理解序列化的概念。在许多文章中,序列化是将对象转换为字节序列(二进制数据)的过程,它在通过网络传输对象时非常有用。
我在这里有些困惑。让我们说,我有一个类对象,我想将它传递给远程过程。当我说对象的意思时,它本身代表同一台计算机中的一组位和字节(因为计算机以位和字节的形式保存任何数据)。在这里,它通过网络传输比特和字节。正确的 ?我不明白这里的序列化概念。
感谢任何帮助。谢谢。
【问题讨论】:
标签:
wcf
web-services
serialization
deserialization
【解决方案1】:
序列化是对象状态的表示,用于传输或存储。
如果您可以完全控制环境,您几乎可以写入内存数据并稍后重新读取。
如果您没有完全控制权,则需要一个规范来编写和解析二进制数据。例如,图像、声音和视频格式是关于如何对给定媒体进行二进制序列化和反序列化的规范。
如果您需要在两个不同的编程环境(C# 和 Java)之间传递一个对象。您必须为您的序列化选择一个协议,因为您不能在两个环境之间传递原始对象状态。您可以编写自己的逻辑来执行此操作,.net 和 java 都支持解析二进制数据和对象生成。或者,您可以使用 SOAP 等公共规范,并使用标准库进行序列化和反序列化。
【解决方案2】:
类的对象将包含指向字符串和其他子对象的指针、引用或其他内容。这些指针是仅在发送计算机的地址空间中有意义的内存地址,因此如果它们通过网络发送到另一台计算机将无效。
换句话说,如果你通过网络发送一个对象的字节,因为它存在于内存中,你只会在另一端得到它的外壳,它的所有内容都将丢失。该对象将只包含指向无意义内存位置的指针。
序列化过程涉及跟踪这些指针并序列化它们末端的对象,以便整个对象图可以通过线路发送,然后在另一端重新组装,固定指针以使其正确目标计算机的地址空间。