我的应用程序逐行读取文本文件并记录每行的偏移量,直到文件末尾。 但是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;
………………………………
}
答案 0 :(得分:0)
我无法重现您的错误,也就是说,当我运行您的代码时,偏移量并不总是0。尽管如此,它并没有按照你的预期去做。您在BufferedReader
之上创建了FileChannel
。 BufferedReader
将填充其缓冲区(从而增加通道中的偏移量),然后从缓冲区读取直到其为空。所以在调用br.readLine()
一次之后,偏移量不是你读过的字符串的长度,它是缓冲区的长度。
您可以更好地直接使用BufferedReader
和FileInputStream
,并通过其他方式计算字符数。