有没有办法将以前初始化的`bufferedReader`重置为流的开头?

时间:2014-12-19 13:33:59

标签: java inputstream bufferedreader fileinputstream

我想要做的是,当我使用初始化bufferedReader时,我曾使用readLine()从文件中读取行,当我到达文件末尾时我想使用相同的bufferedReader对象以读取同一文件的beginnig中的行为例。

我尝试实现此问题的原因是,在初始化mark()我设置reset()之后,我使用了bufferedReaderbufferReaderobject.mark(0),然后我读了整个文件,之后我使用bufferReaderobject.reset()并且agian读取整个文件,但随后抛出异常。似乎reset()仅在文件末尾未到达时才有效。

有没有办法将以前初始化的bufferedReader重置为流的beginnig?

3 个答案:

答案 0 :(得分:2)

为了能够以这种方式使用reset(),整个文件必须适合BufferedReader的缓冲区。

这意味着您必须使用足够大的缓冲区创建BufferedReader,或者在想要再次读取文件时创建新实例。

答案 1 :(得分:2)

试试这个:

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

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

答案 2 :(得分:0)

mark method的BufferedReader文档调用参数readAheadLimit并声明

  

尝试在读取此限制或更高的字符后重置流可能会失败。

所以似乎标记只能向前工作,并且不能用于重置到开始。

另请查看此question