gpt4 book ai didi

java - 我们如何知道一条记录是否已被读取?我们如何跟踪记录指针?

转载 作者:行者123 更新时间:2023-11-30 04:09:15 24 4
gpt4 key购买 nike

我对与处理文件相关的算法感到困惑。
根据我的在线研究,表示可变长度记录的标准方法是将元数据沿着数据放置,例如记录的长度。此外,如果我们想按某种顺序保留记录,我们还可以将指向下一条记录的指针存储为记录字段的一部分。
我们以一个文件为例,其中有 <length,data,next_record_ptr> 形式的记录。这与我上面描述的一致。
我看到的代码片段通常会读取内存缓冲区中文件的部分内容,我想这是有道理的。示例:

ByteBuffer copy = ByteBuffer.allocate(SIZE);  
FileChannel fc = FileChannel.open(file, READ, WRITE);
int nread;
do {
nread = fc.read(copy);
} while (nread != -1 && copy.hasRemaining());

我认为这或多或少是一种读取内存中文件部分的方法。 SIZE可以是包含多个记录的大小。

问题:当内存中有 X 条记录时,我们如何知道我们想要读取的特定记录是否在缓冲区中?示例:如果我有指向下一条记录的指针,我如何知道该特定记录已作为缓冲区的一部分加载,或者我必须从文件中读取更多数据?
这部分在教科书中提到很简单,但我对它的实际实现方式感到困惑。

需要明确的是:提供 Java 示例代码真的很棒!但是用伪代码或清晰的算法对我来说这个暗点的清晰解释也很棒!

更新:
更清楚地说:
如果我读取了数组中的N条记录[N]。如果我读记录array[0]然后得到array[0].pointerToNext例如0x123A在文件中。我怎么知道:
1)如果记录在位置0x123A已在缓冲区中读取,即 array[n]
2)该记录在缓冲区中的索引是多少?

最佳答案

在文件中,记录指针通常存储为记录索引或文件位置。因此,您可以根据您在文件中的当前位置推断您是否已经读取了特定记录。

在您的示例中,您可以使用变量 pos 跟踪文件位置:

int pos = 0;
int nread;
do {
nread = fc.read(copy);
if(nread == -1) {
break;
} else {
pos += nread;
}
} while (copy.hasRemaining());

关于java - 我们如何知道一条记录是否已被读取?我们如何跟踪记录指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20034168/

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