Serialization 二进制文件&;保存的游戏格式

Serialization 二进制文件&;保存的游戏格式,serialization,file-format,Serialization,File Format,我正在开发一个类似流氓的小游戏,需要一些帮助来创建保存游戏。我尝试过几种保存游戏的方法,但加载总是失败,因为我不确定什么是标记玩家、实体和地图不同部分开始的好方法 有什么好方法可以标记每个部分的开头,以便在不知道每个部分长度的情况下可靠地读回数据 编辑:语言是C++。看起来可读格式会更好。感谢您的快速回复。如果您有一个标记,您必须保证该模式在二进制流的其他地方不存在。如果它确实存在,则必须使用特殊的转义序列来区分它。使用0xFF标记不属于数据流的特殊命令。每当数据流包含自然发生的0xFF时,必须

我正在开发一个类似流氓的小游戏,需要一些帮助来创建保存游戏。我尝试过几种保存游戏的方法,但加载总是失败,因为我不确定什么是标记玩家、实体和地图不同部分开始的好方法

有什么好方法可以标记每个部分的开头,以便在不知道每个部分长度的情况下可靠地读回数据


编辑:语言是C++。看起来可读格式会更好。感谢您的快速回复。

如果您有一个标记,您必须保证该模式在二进制流的其他地方不存在。如果它确实存在,则必须使用特殊的转义序列来区分它。使用0xFF标记不属于数据流的特殊命令。每当数据流包含自然发生的0xFF时,必须将其替换为0xFFFF

所以您需要使用一个2字节的标记来开始一个新的部分,比如0xFF01。如果您的读者看到0xFF01,则它是一个新的部分。如果它看到0xFFFF,则将其折叠为单个0xFF。当然,您可以扩展此方法以使用您想要的任何长度标记


(虽然我个人的偏好是文本格式(可选择压缩)或长度字节而不是标记的二进制格式。我不明白在不知道何时读取完数据结构的情况下,您是如何序列化的。)

您真的确定需要二进制格式吗


为什么不以一些文本格式存储,以便可以轻松解析,可以是纯文本、XML或YAML。

最简单的解决方案通常是使用库使用XML或INI写入数据,然后压缩数据。与自定义二进制格式相比,这将更易于解析,并生成更小的文件。
当然,加载它们需要稍长的时间(虽然不会太长,除非您的数据文件是100兆字节)


如果您决定使用二进制格式,请查看。

因为您要保存二进制数据,所以不能使用没有长度的标记。 只需写下任何类型的记录数,然后再写结构化数据,就可以了 很容易再次阅读。如果您有可变长度的元素,如字符串,则还需要长度信息

2
player record
player record
3
entities record
entities record
entities record
1
map

你用什么语言?这可能会影响对诸如状态对象序列化之类的事情的建议。此外,这个听起来非常类似的问题对您有帮助吗?我必须支持这一点。尤其是对于开发,让人们可读(甚至更好,是可编辑的)保存文件是非常有用的。此外,您可以随时将其压缩到相当好的程度。;)文件不会很大,所以速度损失根本无法察觉。谢谢你的解释。我正在考虑将地图数据(2D数组)保存在单独的二进制文件中,其余的是一个文本文件