【发布时间】:2019-10-17 00:17:01
【问题描述】:
BufferedReader 具有来自套接字的数据的对象。如何在不删除的情况下获取整个 BufferedReader 内容。我需要它来进行追踪。
【问题讨论】:
标签: java bufferedreader
BufferedReader 具有来自套接字的数据的对象。如何在不删除的情况下获取整个 BufferedReader 内容。我需要它来进行追踪。
【问题讨论】:
标签: java bufferedreader
您应该mark() 开始缓冲区位置,以便您的reset() 调用回到开头。例如,如果您正在阅读 chars,并且想要标记一个位置以返回:
数据样本:A B C D
System.out.println((char)buffer.read());
System.out.println((char)buffer.read());
buffer.mark(4); // save the position
System.out.println((char)buffer.read());
System.out.println((char)buffer.read());
buffer.reset() // back to 4
System.out.println((char)buffer.read());
System.out.println((char)buffer.read());
将打印:
A B C D C D
(因为一个 char 需要 2 个字节)
【讨论】:
mark 需要BufferedReader 分配一个足够大的缓冲区来容纳整个流吗?来自readAheadLimit 参数文档:“限制在仍保留标记的同时可以读取的字符数。在读取字符达到此限制或超出此限制后尝试重置流可能会失败。限制值更大大于输入缓冲区的大小将导致分配一个新的缓冲区,其大小不小于限制。因此应谨慎使用大值"。
readAheadLimit 的好值,以免它太小或不必要地大(从而导致分配不必要的大缓冲区)。