咨询一个java问题:关于 读取缓冲类BufferedReader中br.mark()方法的用法:

图片说明
上面是错误的情况,下面是正确的情况:
图片说明
求大神能不能详细的讲解一下mark的位置。

4个回答

mark在JAVA中的实现是和缓冲区相关的
mark就像书签一样,在这个BufferedReader对应的buffer里作个标记,以后再调用reset时就可以再回到这个mark过的地方。mark方法有个参数,通过这个整型参数,你告诉系统,希望在读出这么多个字符之前,这个mark保持有效。读过这么多字符之后,系统可以使mark不再有效,而你不能觉得奇怪或怪罪它。这跟buffer有关,如果你需要很长的距离,那么系统就必须分配很大的buffer来保持你的mark。
//做了某些处理,发现需要再读一次
br.reset(); 方法重置

mark后读取多少字节才失效,并不完全由readlimit参数确定,也和BufferedInputStream类的缓冲区大小有关。 如果BufferedInputStream类的缓冲区大小大于readlimit,在mark以后只有读取超过缓冲区大小的数据,mark标记才会失效

wch0lalala
wch_NUDT 回复郭谢谢你解决了我的问题。哈哈我懂了!
大约 4 年之前 回复
guofeng93
枫少文 回复wch0lalala: reset() 将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。
大约 4 年之前 回复
guofeng93
枫少文 回复wch0lalala: BufferedInputStream 之前mark() 缓冲区是1000,里面有内容吗?BufferedInputStream之后呢,已经放了内容进去了
大约 4 年之前 回复
wch0lalala
wch_NUDT 谢谢,参数问题我懂了,我还想知道mark在程序中的位置不同为什么会有不同的结果?
大约 4 年之前 回复

JAVA中mark()和reset()用法的通俗理解
mark就像书签一样,在这个BufferedReader对应的buffer里作个标记,以后再调用reset时就可以再回到这个mark过的地方。mark方法有个参数,通过这个整型参数,你告诉系统,希望在读出这么多个字符之前,这个mark保持有效。读过这么多字符之后,系统可以使mark不再有效,而你不能觉得奇怪或怪罪它。这跟buffer有关,如果你需要很长的距离,那么系统就必须分配很大的buffer来保持你的mark。

wch0lalala
wch_NUDT 谢谢,参数问题我懂了,我还想知道mark在程序中的位置不同为什么会有不同的结果?
大约 4 年之前 回复

public void mark(int readAheadLimit)
throws IOException标记流中的当前位置。对 reset() 的后续调用将尝试将该流重新定位到此点。

覆盖:
类 Reader 中的 mark
参数:
readAheadLimit - 在仍保留该标记的情况下,对可读取字符数量的限制。在读取此数量的字符后,尝试重置流可能会失败。限制值大于输入缓冲区的大小将导致分配一个新缓冲区,其大小不小于该限制值。因此应该小心使用较大的值。
抛出:
IllegalArgumentException - 如果 readAheadLimit < 0
IOException - 如果发生 I/O 错误

我把我仅有的5C币都给了。呜呜呜

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐