一尘不染

用Java中的BufferedReader重置缓冲区?

java

我正在使用类BufferedReader在缓冲区中逐行读取。当读取缓冲区的最后一行时,我想再次从缓冲区的开头开始读取。我已经阅读过有关mark()和的信息reset(),我不确定它的用法,但我认为它们不能帮助我。

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


阅读 501

收藏
2020-09-08

共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));

(请注意,不建议使用默认字符集,仅使用简化示例即可)。

2020-09-08