java - 选择正确的文件格式

标签 java file serialization format file-format

我正在开发一个应用程序,它应该能够保存/加载数据。大多数数据存储在类的实例中。实例中的数据包括:

  • 一个双[][]数组
  • 一些String、int、bool和一些枚举器

我有多个这样的实例以及一些我想存储在单个文件中的全局数据。

到目前为止,我使用

将所有内容保存为二进制数据
DataOutputStream out = new DataOutputStream(FileOutputStream(file));
out.writeInt()/writeBoolean()/writeUTF()/etc

这很好用,问题是它不太灵活。如果我向容器类添加/删除一些变量,则没有简单的方法可以使旧格式仍然兼容。我开始使用在文件开头添加的版本号。但这会导致每个格式版本都有一个很大的 loadData/closeData 方法。

基于文本的文件是不可能的,因为它们为我的双数组使用了太多空间。

你知道解决这个问题的好方法吗? IE。定义一个向后兼容的格式,不会导致大量的代码?如有任何建议,我们将不胜感激。

我正在考虑的一个想法是用一个标识该变量的整数来标记每个变量。因此格式为 [identifier1][variable1(String)][identifier2][variable2(double[][])]...

我也想过序列化,但我没有任何经验,无法真正判断这是否是正确的方法。

如果您需要有关数据或示例的更多信息,请发表评论。

最佳答案

http://code.google.com/p/protobuf/是 Google 很好的跨平台(和跨语言)数据存储方式,并且已经内置了向后兼容性,可以尝试一下。

特别是文档的这一部分与您的案例有关:

New fields could be easily introduced, and intermediate servers that didn't need to inspect the data could simply parse it and pass through the data without needing to know about all the fields.

关于java - 选择正确的文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11797715/

相关文章:

c# - 在 C# 中序列化泛型类

java - 使用泛型时,RestClient 不会返回精确的未编码对象

java - 如何检查日期和时间戳是在 20 分钟之前

javascript - 如何在 javascript 中解析 XML 文件。大文件可能使用SAX?

ios - 使用新文本重新加载 TextView 时清除内存 - iOS Swift

.net - WCF 服务的自定义序列化转换器

.net - 为什么不能在 C# 中对字典对象进行 XmlSerialized?

java - 如何使用 json.simple 和 java 在 JSONArray 中的每个 JSONObject 之间添加新行

java.lang.ClassNotFoundException : org. apache.hive.service.cli.HiveSQLException 异常

文件打开和文件输出的 C++ 问题