JAVA中mark()和reset()用法(二)

2014-11-24 03:16:42 · 作者: · 浏览: 1
eadlimit)方法时,如果readlimit大于BufferedInputStream类缓冲区的大小,缓冲区会被扩大,那mark后最多就可以读readlimit字节。

简言之,BufferedInputStream类调用mark(int readlimit)方法后读取多少字节标记才失效,是取readlimit和BufferedInputStream类的缓冲区大小两者中的最大值,而并非完全由readlimit确定。这个在JAVA文档中是没有提到的。

JAVA中mark()和reset()用法的通俗理解

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

//eg.

//reader is a BufferedReader

reader.mark(50);//要求在50个字符之内,这个mark应该保持有效,系统会保证buffer至少可以存储50个字符

int a = reader.read();//读了一个字符

int b = reader.read();//又读了一个字符

//做了某些处理,发现需要再读一次

reader.reset();

reader.read();//读到的字符和a相同

reader.read();//读到的字符和b相同

作者 centralperk