Java更新大型二进制文件

时间:2013-11-21 13:42:34

标签: java android file binary updating

所以我正在开发Android应用程序,一种书籍阅读器。这些书存储为500mb +二进制文件,其中存储有某些对象,并存储在一个小的二进制文件中,该文件包含对大文件中特定对象的映射。我需要找到最有效的方法来执行某个发布文件的更新。 incomming更新包将包含相对较小的文件,其中包含需要从原始大文件中删除的对象的偏移+长度,将在大文件末尾添加的一组新对象,以及更新后的新映射。很明显。

我用Google搜索了ALOT,但我仍然无法找出是否有更好的解决方案,而不是复制我想要保存到新文件中的内容。有没有更有效的方法来做到这一点?我的意思是我提到的aproach需要双磁盘空间作为主要的大文件,并且它似乎也没有任何快速的方式。

提前,Mac

2 个答案:

答案 0 :(得分:0)

这是一个常见的问题。

通常,这种文件存储在某种“模式”中。

也就是说,它们是永久存储器上的序列化对象。

因此,只要您知道“模式” - 更准确 - 数据对象的结构,您就可以使用RandomAccessFile来读取此文件的特定部分。

举一个非常简单的例子:

1. You load the index of contents(like several mega bytes) into memory
2. When you want to look up the a word, you first search in the index of contents, and find the "address" of the explanation of this word in the huge file
3. You read the particular part of the file and get the detailed content
4. Done

类似的方法也可能适用于文件的更新,请参考随机访问文件的java文档。

答案 1 :(得分:0)

好吧,我想出了一个不需要另一个文件副本的解决方案。 我只需要先删除第一个偏移量,然后跳转到偏移量+它的长度,取一个字节的数字让我们说最小(到下一个删除的对象的距离)和最大1k,将它粘贴到删除条目的偏移处并查找另一个要删除的,不确定我是否以适当的方式解释它,但是,因为你自己的问题经常导致这种问题xD