【问题标题】:Best file format regarding standard string and integer data?关于标准字符串和整数数据的最佳文件格式?
【发布时间】:2011-06-20 19:49:10
【问题描述】:

对于我的项目,我需要存储有关协议的信息(发送的数据(很可能是整数)以及发送的顺序)以及可能格式如下的信息:
'ID' ' STRING' '附加整数数据'
这些信息将被 Java 程序读取并存储在内存中进行处理,但我不知道存储这些数据的最明智的格式是什么?

编辑:这里有一些额外的信息:
1)我将在游戏服务器中使用这些数据。
2)由于是游戏服务器,所以速度不是首要考虑的问题,因为这些数据将在启动时主要被读取和使用,这种情况不应该经常发生。
3)我希望将内存消耗保持在最低限度。
4)第二个数据“示例”将用作“字典”来查找特定游戏内物品的名称、它们的统计数据和其他整数数据(因此可能会变得非常大,与包含协议信息的第一个数据不同,其中每个文件只会记录小的协议片段,例如登录协议)。
5) 是的,我希望数据是“人工可编辑的”。

编辑 2:这是我所做的选择:
JSON - 用于协议描述
CSV - 用于字典

【问题讨论】:

  • 你能举一个“附加整数数据”的例子吗?它是一个整数、整数列表、整数的指定格式还是什么?

标签: java file-format


【解决方案1】:

有很多因素可以衡量——这里有一些事情可以帮助你解决这个问题:

1) 速度/内存使用:如果数据需要快速加载或非常大,您可能需要考虑滚动自己的二进制格式。

2) 可移植性/兼容性:与 #1 相平衡的是您可能希望在其他地方使用数据,而程序不会读取自定义二进制格式。在这种情况下,您的重头戏可能会是 CSV、dBase、XML 和我个人最喜欢的 JSON。

3) 简单性:CSV 等分隔格式易于手动阅读、编写和编辑。要么使用带有适当转义的双引号,要么选择一个不会出现在数据中的分隔符。

如果您可以发布有关您的情况以及这些因素的重要性的更多信息,我们或许可以为您提供进一步的指导。

【讨论】:

  • 另外两个考虑:数据是否具有继承性(在这种情况下看起来不是),是否需要人类可读/可写?如果是最后一个,您可以将 YAML (jyaml.sourceforge.net) 添加到列表中。
【解决方案2】:

XML,JSONCSV 怎么样?

【讨论】:

    【解决方案3】:

    我已经使用 XML 编写了类似的协议规范。 (可用here。)

    我认为这是一个很好的匹配,因为它捕获了指定消息/网络包/字段等的层次结构。字段的顺序定义良好等等。

    我什至编写了一个代码生成器,它生成消息发送/接收类,其中包含 XSLT 中每种消息类型的方法。

    在我看来,唯一的缺点是冗长。如果您的规范结构非常简单,我建议您使用一些简单的自制格式,并使用您选择的解析器生成器为其编写解析器。

    【讨论】:

      【解决方案4】:

      除了此处其他人建议的格式(CSV、XML、JSON 等)之外,您还可以考虑将信息存储在 Java 属性文件中。 (请参阅java.util.Properties 类。)代码已经为您准备好了,所以您只需弄清楚要使用的属性名称(或名称前缀)。

      Properties 类还提供以简单 XML 格式存储/加载属性。

      【讨论】:

        猜你喜欢
        • 2019-04-18
        • 2011-01-15
        • 2016-08-15
        • 1970-01-01
        • 1970-01-01
        • 2013-09-06
        • 2015-05-21
        • 2012-04-09
        • 1970-01-01
        相关资源
        最近更新 更多