序列化概念 - java - C#

时间:2012-01-25 12:46:01

标签: wcf web-services serialization deserialization

我试图理解序列化的概念。在许多文章中,序列化是将对象转换为字节序列(二进制数据)的过程,并且在通过网络传输对象时非常有用。

我在这里有些困惑。让我们说,我有一个类的对象,我想将它传递给远程过程。当我说对象意味着,它本身代表同一台计算机中的一组位和字节(因为计算机以位和字节的形式保存任何数据)。这里,它通过网络传输这些位和字节。对 ?我不明白这里的序列化概念。

感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:2)

类的对象将包含指向字符串和其他子对象的指针,引用或其他内容。这些指针是仅在发送计算机的地址空间中有意义的内存地址,因此如果它们通过网络发送到另一台计算机则无效。

换句话说,如果你通过网络发送一个对象的字节,因为它存在于内存中,你只会在另一端获得它的shell,并且它的所有内容都将丢失。相反,该对象只包含指向无意义内存位置的指针。

序列化的过程包括跟踪这些指针并序列化它们末尾的对象,以便整个对象图可以通过线路发送,然后在另一端重新组装,修复指针,使它们正确目标计算机的地址空间。

答案 1 :(得分:0)

序列化是对象状态的表示,用于传输或存储。  如果您完全控制了环境,那么您几乎可以写入内存数据并稍后重新读取。

如果您没有完全控制权,则需要一个规范来编写和解析二进制数据。例如,图像,声音和视频格式是关于如何二进制序列化和反序列化给定媒体的规范。

如果需要在两个不同的编程环境(C#和Java)之间传递对象。您必须为序列化选择协议,因为您无法在两个环境之间传递原始对象状态。您可以编写自己的逻辑来执行此操作,.net和java都支持解析二进制数据和对象生成。或者,您可以使用SOAP之类的公共规范,并使用标准库进行序列化和反序列化。