gpt4 book ai didi

java - 在 RandomAccessFile 中插入数据并更新索引

转载 作者:行者123 更新时间:2023-12-01 15:43:00 24 4
gpt4 key购买 nike

我有一个 Java 中的 RandomAccessFile,我可以在其中管理一些数据。简化:在文件的开头我有一个索引。 (每个数据集 8 个字节长的值,表示可以找到实际数据的偏移量)。

因此,如果我现在想在哪里可以找到例如数据集 3 的数据。我在偏移量 (2*8) 处读取了 8 个字节。 (索引从0开始)。

数据集本身由 4 个字节组成,代表数据集的大小,然后是属于该数据集的所有字节。

这样,如果我总是重写整个文件,效果就很好。

这里非常重要的是,数据集 3 可以被写入文件中的第一个条目,因此索引是有序的,而不是数据本身。

如果我插入新的数据集,我总是将其附加到文件末尾。但一个文件中可以包含的数据集数量是有限的。如果我可以在文件中存储 100 个数据集,那么索引中将始终有 100 个条目。如果从数据集索引读取的偏移量为 0,则该数据集是新数据集并将附加到文件中。

但是有一个案例对我来说还不起作用。如果我读数据集没有。 3 从文件中,我在应用程序中添加了一些数据,我想在文件中更新它,但我不知道如何执行此操作。

如果它的长度与以前相同,我可以简单地覆盖旧数据。但是,如果新数据集比旧数据集具有更多字节,我将必须移动该数据集后面的文件中的所有数据并更新这些数据集的索引。

知道该怎么做吗?或者是否有更好的方法来管理将这些数据集存储在文件中?

PS:是的,我当然考虑过使用数据库,但这不适用于我的项目。我确实需要简单的文件。

最佳答案

您无法轻松地将数据插入文件的中间。您基本上必须读取所有剩余数据,写入"new"数据,然后重写“旧”数据。或者,您可能会使旧的“慢”记录无效(可能允许稍后重用它),然后将整个新记录写入文件末尾。说实话,我不太清楚您的文件格式,但从根本上讲,您需要注意不能在文件中间插入(或删除)。

关于java - 在 RandomAccessFile 中插入数据并更新索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7710356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com