我知道序列化是将对象转换为字节码的一种方法,但是这种机制的目的是什么?例如可以用来保存游戏状态吗?(通过序列化地图、播放器等对象)
5 回答
这里有4个原因。
如果您有两台机器运行相同的代码,并且它们需要通信,那么一种简单的方法是让一台机器使用它想要传输的信息构建一个对象,然后将该对象序列化到另一台机器。这不是最好的沟通方式,但它可以完成工作。
如果您想将特定操作的状态存储在数据库中,可以轻松地将其序列化为字节数组,并存储在数据库中以供以后检索。
如果您需要一个对象的精确副本,并且不想麻烦编写自己的专用 clone() 类,只需将对象序列化为字节数组,然后将其反序列化为另一个对象即可实现此目的目标。
真的只是上面的一个应用,但有时一个对象需要 10 分钟来构建,而反序列化只需要 10 秒。因此,与其在内存中保留巨大的对象,不如通过序列化将其缓存到文件中,并在以后需要时将其读取。
在计算机科学中,在数据存储和传输的上下文中,序列化是将数据结构或对象状态转换为可以存储的格式(例如,在文件或内存缓冲区中,或通过网络连接链路传输)的过程) 并且稍后在相同或另一个计算机环境中“复活”。
序列化的输出格式并不总是字节数组,它可以是 XML、JSON、简单文本或任何其他可以完全或部分描述给定对象状态的格式。
这个过程的应用数不胜数。
- 保存/加载功能大部分时间都是使用序列化完成的。
- Web 服务使用 XML/JSon 序列化在组件之间传输数据
。 - 二进制序列化可用于通过网络传输对象数据。
- 撤消/重做功能也使用序列化/反序列化来保存对象的旧状态,尽管还有其他方法。
基本上,序列化用于存储需要稍后检索状态的单个数据对象。
这样对象就可以被持久化或传输。
http://msdn.microsoft.com/en-us/library/7ay27kt9(v=vs.71).aspx
序列化是将对象的状态转换为可以持久化或传输的形式的过程。序列化的补充是反序列化,它将流转换为对象。这些过程一起使数据可以轻松存储和传输。
您经常需要序列化对象,也就是说,以稍后会补充的形式“保存”,或者通过网络传输它们。这可能是用户的偏好、应用程序的状态、文档、发送到服务的命令等......
你在这里有链接:http: //msdn.microsoft.com/fr-fr/library/7ay27kt9.aspx
它本质上允许您保存任何对象的状态,以便可以“使相同的实例(对象)恢复生机”。IE所有实例变量都被保存。所以是的,使用它来保存玩家、他的统计数据、库存等都是使用序列化的好例子。
但是请记住,当您序列化一个对象时,序列化对象引用的所有对象也会被序列化。并且任何这些被引用对象引用的所有其他对象也被序列化。等等等等。因此,为了使序列化正常工作,任何可能绑定到序列化对象的潜在对象也必须是可序列化的。
另请注意,不会保存静态变量。此外,您不希望保存的实例变量可以标记为瞬态。