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