A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Yov正 中级黑马   /  2014-4-17 16:40  /  1261 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

因为想要读取2次,想用reset,但是得先mark,但是mark的参数貌似会对读取有限制啊,该给多少呢
下面是jdk的部分
public void mark(int readAheadLimit)
          throws IOException标记流中的当前位置。对 reset() 的后续调用将尝试将该流重新定位到此点。
参数:
readAheadLimit - 在仍保留该标记的情况下,对可读取字符数量的限制。在读取达到或超过此限制的字符后,尝试重置流可能会失败。限制值大于输入缓冲区的大小将导致分配一个新缓冲区,其大小不小于该限制值。因此应该小心使用较大的值。

1 个回复

倒序浏览
说下我的理解哈,不知道对不对。
mark()相当于是在你需要的位置下了一个标。当你使用reset()之后,将重新回到这个标的位置开始读。
(注意,mark的标记是在你指定的标志字符后面。比如你要标“456789”,那么这个标就放在9的后面,reset之后从9后面的第一个字符读起。)
这时候的参数readAheadLimit ,意思就是在这个标迹往后,在读多少个字符的限制。如果你在标后面还有1000个字符,但是这个参数只设定了500,那么你在读取了达到或是超过500个字符以后,就有可能“尝试重置流可能会失败。”
但是这个值设定的超过了缓冲区的大小同样会有问题,就是程序会自动分配一个新缓冲区,造成内存的占用。如果你把这个值设定的太大,就会导致新分配的缓冲区太大,占用过多内存空间。
所以我觉得一般设定的比你的缓冲流的缓冲区稍微大一点点应该就够用了。把mark标在最开始从头读到尾也不会超出这个限制。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马