有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

序列化为java开发(文件)交换格式

我想提出一种二进制格式,用于以POF(普通旧文件;)的形式在应用程序实例之间传递数据

先决条件:

  1. 应该是跨平台的
  2. 要持久化的信息包括一个POJO&;任意字节[]s(实际上,POJO将其名称存储在字符串[]中)
  3. 只需要顺序访问
  4. 应该是检查数据一致性的一种方法
  5. 应该小而快
  6. 应防止使用archiver+记事本的普通用户修改数据

目前,我正在使用DeflaterOutputStream+OutputStreamWriter和InflaterInputStream+InputStreamReader来保存/恢复用XStream序列化的对象,每个文件一个对象。读写器使用UTF8。 现在,需要扩展它来支持前面描述的功能。 我对格式的看法:

{serialized to XML object}
{delimiter}
{String file name}{delimiter}{byte[] file data}
{delimiter}
{another String file name}{delimiter}{another byte[] file data}
...
{delimiter}
{delimiter}
{MD5 hash for the entire file}
  1. 这看起来正常吗
  2. 您将使用什么作为分隔符,以及如何确定它
  3. 在这种情况下,计算MD5的正确方法是什么
  4. 关于这个话题,你有什么建议

蒂娅


共 (4) 个答案

  1. # 1 楼答案

    我同意这一点,因为听起来你并不需要一种新的格式,或者二进制格式。 如果你真的想要二进制格式,为什么不考虑其中的一个:

    • 二进制XML(快速信息集,Bnux)
    • 黑森
    • 谷歌数据包缓冲区

    但除此之外,许多文本格式也应该工作得很好(或者更好);更容易调试,广泛的工具支持,压缩到与二进制文件大致相同的大小(二进制文件压缩效果很差,信息论表明,对于相同的有效信息,可以获得相同的压缩率——在我的测试中也是如此)

    因此,或许还可以考虑:

    • Json运行良好;通过base64提供二进制支持(比如说,http://jackson.codehaus.org/
    • XML也不错;高效的流式解析器,一些具有base64支持(http://woodstox.codehaus.org/,“org.codehaus.stax2.typed.TypedXMLStreamReader”下的“类型化访问API”)

    所以听起来你只是想建立自己的东西。没有什么错,作为一种爱好,但如果是这样的话,你需要考虑它。 这可能不是您正在构建的系统的要求

  2. # 2 楼答案

    你可以用拉链(rar/7z/tar.gz/…)图书馆很多都存在,大多数都经过了很好的测试,这可能会为你节省一些时间

    但可能没那么有趣

  3. # 3 楼答案

    模型的序列化(如果你喜欢MVC)不是另一种方式吗?如果可能的话,我宁愿使用语言(或标准库)中的东西,也不愿使用自己的。我能看到的唯一问题是,文件大小可能比您想要的大

  4. # 4 楼答案

    1)这看起来正常吗

    看起来相当理智。然而,如果你打算发明自己的格式,而不是仅仅使用Java serialization,那么你应该有一个很好的理由。你有什么好的理由吗(在某些情况下确实存在)?使用XStream的标准原因之一是使结果具有可读性,而二进制格式会立即丢失。你有充分的理由选择二进制格式而不是人类可读的格式吗?参见this question了解人类可读性好(和坏)的原因

    把所有东西都放在一个有签名的罐子里不是更容易吗。已经有standard Java librariestools来做这件事,你可以得到压缩和验证

    2)您将使用什么作为分隔符,以及如何确定它

    我会在块之前显式存储每个块的长度,而不是分隔符。它同样简单,并且可以防止在分隔符自动出现时必须跳出它

    3)在这种情况下,计算MD5的正确方法是什么

    example code here看起来很合理

    4)关于这个主题,你建议读什么

    关于连载的问题?我读过关于Java序列化、JSON和XStream序列化的书,所以我了解了它们的优缺点,尤其是人类可读文件的好处。我还将研究一种经典的文件格式,例如来自微软的文件格式,以了解在每个字节都很重要的年代可能做出的设计决策,以及这些决策是如何扩展的。例如:The WAV file format