0

我的应用程序逐行读取文本文件并记录每行的偏移量,直到文件结束。但是 position() 总是返回 0。我的代码有什么问题?

String buffer;
long offset;
RandomAccessFile raf = new RandomAccessFile("data.txt", "r");
FileChannel channel = raf.getChannel();
BufferedReader br = new BufferedReader(new InputStreamReader(Channels.newInputStream(channel)));

while (true) {
    offset = channel.position(); // offset is always 0. why?
    if ((buffer = br.readLine()) == null) // buffer has correct value.
        return;
    ………………………………
}
4

1 回答 1

0

我无法重现您的错误,也就是说,当我运行您的代码时,偏移量并不总是 0。尽管如此,它并没有做你期望它做的事情。您BufferedReaderFileChannel. 将BufferedReader填充其缓冲区(从而增加通道中的偏移量),然后从缓冲区读取直到其为空。所以调用br.readLine()一次后,偏移量不是你读到的字符串的长度,而是缓冲区的长度。

您可以更好地直接使用 aBufferedReaderFileInputStream通过其他方式计算字符。

于 2015-01-25T14:24:14.467 回答