在Java中使用BufferedReader重置缓冲区?

2022-09-02 02:51:48

我正在使用类在缓冲区中逐行读取。读取缓冲区中的最后一行时,我想再次从缓冲区的开头开始读取。我已经阅读了关于 和 ,我不确定它的用法,但我认为他们不能帮助我解决这个问题。BufferedReadermark()reset()

有谁知道如何在到达最后一行后从缓冲区的开头开始读取?就像我们可以用的?seek(0)RandomAccessFile


答案 1

标记/重置是你想要的,但是你不能在BufferedReader上真正使用它,因为它只能重置回一定数量的字节(缓冲区大小)。如果你的文件大于此值,它将不起作用。没有“简单”的方法可以做到这一点(不幸的是),但它并不是太难处理,你只需要一个原始FileInputStream的句柄。

FileInputStream fIn = ...;
BufferedReader bRead = new BufferedReader(new InputStreamReader(fIn));

// ... read through bRead ...

// "reset" to beginning of file (discard old buffered reader)
fIn.getChannel().position(0);
bRead = new BufferedReader(new InputStreamReader(fIn));

(请注意,不建议使用默认字符集,只需使用简化的示例)。


答案 2

是的,标记和重置是您要使用的方法。

// set the mark at the beginning of the buffer
bufferedReader.mark(0);

// read through the buffer here...

// reset to the last mark; in this case, it's the beginning of the buffer
bufferedReader.reset();