gpt4 book ai didi

java - BufferedReader 中的标记和重置是什么?

转载 作者:IT老高 更新时间:2023-10-28 20:40:41 27 4
gpt4 key购买 nike

我想知道BufferedReadermark()reset()方法是什么?我该如何使用它们?我阅读了 Javadoc,但作为初学者我无法理解它。

最佳答案

流的 markreset 方法提供了一种在流中向后跳转并重新读取数据的方法。

当您在 BufferedReader 上调用 mark() 时,它将开始将您从该点读取的数据向前保存在其内部缓冲区中。当您调用 reset() 时,它会跳回到流的标记位置,因此下一个 read() 将由内存缓冲区满足。当您读取该缓冲区的末尾时,它将无缝返回读取新数据。 BufferedInputStream 的工作方式相同。

mark 的 int 参数告诉它您想要的最大字符数(对于 BufferedReader)或字节数(对于 BufferedInputStream)能够倒退。如果您在标记位置之后读取的数据过多,则标记可能会“无效”,并且调用 reset() 将失败并出现异常。

一个小例子:

BufferedReader r = new BufferedReader(new StringReader(
"Happy Birthday to You!\n" +
"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 已经自己支持 markreset 了!从 in-memory 数据源读取的流通常支持 markreset 本身,因为它们已经拥有内存中的所有数据,所以它是方便他们再次阅读。从文件或管道或网络套接字读取的流自然不支持 markreset,但您始终可以将该功能添加到任何流中,方法是将其包装在 中BufferedInputStreamBufferedReader.

关于java - BufferedReader 中的标记和重置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8240071/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com