mark/code> and reset
methods of streams provide a way to pitbacks in the stream and re-read data.
当你在<条码>上打上<条码>符号><>>>条码>时,将开始把从该点读到的数据放在内部缓冲。 当您打电话reset(>
)时,将跳跃到上游的标志位置上,下台read(
s>将由内层缓冲感到满意。 当你读过该缓冲地带的结束时,它将顺畅地重读新的数据。 <代码>BufferedInputStream 工作方式相同。
<代码>符号> (BufferedReader
)或由他人(BufferedInputStream
)表示,你希望能够退学。 如果你读得太多数据,那么标记可以是“无效的”,而打<代码>reset(将例外地失效。
A little example:
BufferedReader r = new BufferedReader(new StringReader(
"Happy Birthday to You!
" +
"Happy Birthday, dear " + System.getProperty("user.name") + "!"));
r.mark(1000); // save the data we are about to read
System.out.println(r.readLine()); // read the first line
r.reset(); // jump back to the marked position
r.mark(1000); // start saving the data again
System.out.println(r.readLine()); // read the first line again
System.out.println(r.readLine()); // read the second line
r.reset(); // jump back to the marked position
System.out.println(r.readLine()); // read the first line one final time
在这种例子中,我把<代码>StringReader列入一个<代码>BufferedReader,以获得<代码>readLine()方法,但<代码>StringReader已获得支持的<代码>>>>> /编号>和reset
自有! 取自in-memory 数据来源的精度通常支持mark
和reset<>t/code>本身,因为它们已经拥有所有数据,因此很容易再读。 从档案或管道或网络袖珍中读出的镜头并不自然地支持<条码><>t>>和<条码>reset
,但你总是可以通过在<条码>中填入这一特征而添加这一特征。 BufferedInputStream或BufferedReader
。