随Java库的随机访问结构化归档文件格式

时间:2012-12-07 21:40:13

标签: java zip archive file-format

我和我的团队需要一个支持Java库的文件格式,其中包含有关某些较大文件的各种元数据。事实上,我们希望将大文件(可能是100MB)和其他相关文件(元数据,非破坏性编辑等)包装到一个捆绑的存档文件中。

对于一次性创建,这是一件轻而易举的事:只需将所有内容都放在Zip文件中即可。但我们希望能够不断更新元数据,非破坏性编辑等。我们不希望将整个> 100MB内容转储到临时目录,然后将所有内容拉回来只是为了向其中一个添加一行元数据文件。

通过声称将zip文件或其他存档文件格式抽象为文件系统,表面上有一些项目(例如TrueVFS)听起来很理想。但仔细观察后,我们得到的唯一就地更新功能似乎很简单appending new files,而不是实际更改或附加到单个文件。

我们需要的是Zip文件和关系数据库之间的一些文件格式。具有层次结构的东西会很棒。它必须有效地支持相当大的文件(超过100MB)并允许随机访问以添加,删除和更改存档中的单个文件。我很惊讶无法找到任何东西。有什么建议吗?

P.S。几年前我遇到了很糟糕的经历,Microsoft compound file format被破坏了。我不知道像Apache POIFS这样的东西对于大文件是否可靠和有效。

2 个答案:

答案 0 :(得分:0)

我不相信你要求的东西很容易出于一个简单的原因:文件系统通常不支持在文件中间插入数据 - 不是没有截断和重写余数。这意味着当该文件存储在存档中时,普通文件上的简单附加变成截断重写操作。

您必须找到一些基于块的格式,它基本上会复制实际文件系统的大部分功能,以便允许此类操作。

我会考虑重构整个系统以在该大数据文件上强制执行某些结构。这将允许您将其转换为可以存储在数据库中的内容。例如,基于行的文本可以存储在具有两列的表中 - 行号作为主键和行文本。任何基于行的操作都很容易变成基于数据库的操作。

然后,您可以使用SQLite等嵌入式数据库将所有内容保存在同一个文件中,而不依赖于外部服务器。

答案 1 :(得分:0)

根据您要在哪个平台上运行应用程序,您可以使用我们的Solid File System - 这是一个由可自动调整大小的容器文件支持的虚拟文件系统。它是用Ansi C编写的,并且有适用于Android的Java JNI包装器(这个包装器可以根据要求提供给其他平台 - 我们之前没有这样的目标)。

还存在Codebase文件系统,据我所知也提供了JNI for Java。