我正在使用类BufferedReader在缓冲区中逐行读取。当读取缓冲区的最后一行时,我想再次从缓冲区的开头开始读取。我已经阅读过有关mark()和的信息reset(),我不确定它的用法,但我认为它们不能帮助我。
BufferedReader
mark()
reset()
有人知道到达最后一行后如何从缓冲区的开头开始读取吗?像我们可以使用seek(0)的RandomAccessFile?
seek(0)
RandomAccessFile
标记/重置是您想要的,但是您不能真正在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));
(请注意,不建议使用默认字符集,仅使用简化示例即可)。