1
25
每当一个对象需要持久化或传输到其存在范围之外时,就需要序列化。 持久性是将一个对象保存到某个地方并在以后以相同的状态加载它的能力。例如:
传输是将对象发送到其原始范围之外的某个接收器的能力。例如:
对于其中的每一个,都必须有一些串行位表示,可以存储、通信,然后用于重构原始对象。将一个对象转换成这一系列位的过程称为“序列化”,而将一系列位转换成原始对象的过程称为“反序列化”。
根据目标的不同,序列化形式的对象的实际表示形式可能有所不同。例如,在C中,两个XML序列化(通过
上面提到的XML表示对于以标准格式存储对象很好,但是根据需要,它可能是冗长而缓慢的。二进制表示节省了空间,但在语言和运行时的可移植性不如XML。重要的一点是,序列化程序和反序列化程序必须相互理解。当您开始引入向后和向前的兼容性和版本控制时,这可能是一个问题。 潜在序列化兼容性问题的示例:
如果2.0版
我自己没有使用这些技术,但是.NET 2.0和更高版本支持 version tolerant serialization 要支持向前和向后兼容性:
|
2
2
例如,当您想通过网络发送对象或将其存储到文件中时。
假设您正在为一个视频游戏创建一个savegame格式。然后你就可以上课了
另一方面,当为您的游戏编写多人实现时,您可以发送
|
3
2
在非面向对象的语言中,通常将数据以字节模式存储在内存中,这种模式在不引用任何其他内容的情况下“有意义”。例如,图形编辑器中的一组形状可能只是将其所有点连续存储。在这样一个程序中,简单地将所有数组的内容存储到磁盘上可能会生成一个文件,当重新读取到这些数组中时,该文件将生成原始数据。 在面向对象语言中,许多对象存储为对其他对象的引用。仅仅存储内存中数据结构的内容是没有用的,因为对对象24601的引用不会说明该对象所代表的内容。虽然一个面向对象的系统能够很好地理解内存中数据的“含义”,并尝试将其自动转换为一种合理的格式,但它无法识别指向同一对象的对象引用与指向恰好匹配的对象的对象引用之间的所有区别。因此,在将对象转换为原始比特流时,通常需要帮助系统。 |
4
1
不是类,但特定对象可能被序列化以存储在某个持久存储中,或者通过网络将对象传递给另一个应用程序。 |
5
1
例如,当您想将一个对象发送到某个URL时,您可能决定以XML格式发送它。从内存中的对象转换为(在本例中)XML的过程称为序列化。从XML转换为内存中的称为反序列化。 |