java二进制文件操作

时间:2012-02-22 11:24:40

标签: java serialization object binary

我有一堆不同的对象(和objec类型),我想写入二进制文件。首先,我需要将文件结构如下:

`对象类型1

obj1, obj2 ...

对象类型2

obj1, obj2...

...

作为一个二进制文件,这对用户没有帮助,但我希望有一个结构,所以我可以按类型搜索,删除或添加对象,而不是解析整个文件。这是我不知道该怎么做的事情。这甚至可以吗?

1 个答案:

答案 0 :(得分:1)

您必须在文件的开头(或其他位置)维护标题,以标记每个对象的位置和长度。

标题的种类和布局很大程度上取决于您计划如何读取和写入文件。例如,如果您计划按名称检索对象,则可以在文件中添加类似

的文件
object1 500 1050
object2 1550 800
object3 2350 2000
<some padding to cover 500 bytes>
<the 1050 bytes of object1><the 800 bytes of object2><the 2000 bytes of object3> 

并且知道object1从文件中的偏移量400开始,并且长度为1050字节。

由于您似乎要存储不同类型的对象,因此您可能需要向标头添加一些其他数据。

请注意以下事项:

  • 每次添加,删除或修改文件时,都必须在标题中更新后面所有文件的偏移量(例如,如果删除object2,则object3的偏移量现在为1550)。
  • 如果将标题存储在与数据相同的文件中,则在计算偏移时必须考虑标题的大小(这会使事情变得更加困难,我建议您将标题和二进制数据分开。< / LI>
  • 每次要访问对象时,都必须读取并解析标题。考虑使用标头格式来避免问题(YML或XML)。

我不知道任何可以帮助你实现这个功能的库,但我很确定有一些。也许有人可以推荐一个。

-

另一种解决方案是使用ZipFile(Java本身支持)之类的东西,并将每个对象写为differenz ZipEntry。这样您就不必自己管理对象分离,只需要担心知道所需的ZipEntry。