首先,在介绍mark()方法的应用之前
我们还是先来简单介绍一下mark()这个方法的作用吧:
mark()方法,是InputStream中提供的一个方法
由于InputStream的作用就是用来读取数据的
所以为了方便理解,在这里你就可以把读取数据的过程想象成读书的过程
当你调用mark()方法时,你就相当于往你正在读的这一页夹入了一个书签
这样,如果你以后想要从这一页重新读的话,你就只需要翻回到书签所在的位置就可以了
所以,mark()这个方法的作用是:
在InputStream读取数据的时候
你只要调用mark()方法,就可以在当前正在读取的位置建立一个标记
这样,不管这个InputStream又向后继续读取到了哪里
都可以很方便地让InputStream回到标记的位置,并从这个位置开始重新读取后面的数据
而让InputStream回到标记的位置的方法,叫做reset()方法,这个方法也是由InputStream提供的
好了,既然了解了mark()方法的作用,那么它的应用也就比较明朗了吧
比如说,当你读取一个文件的时候,如果你想要把文件中的一部分重复读取多遍
你就可以在想要重复读取的起点调用mark()方法,并且在想要重复读取的终点调用reset()方法就可以了
当然,这只是一个例子而已,具体的应用,还是需要靠你在工作和生活中去遇到~
但是,就像你的疑问那样,并不是所有的InputStream类都是支持mark()和reset()操作的
比如说,用来从文件中读取数据的FileInputStream,就是一个典型的不支持mark()和reset()操作的类
那么,如果你想要重复读取一个文件中的一段内容的话,应当怎么办呢?
呵呵,在这里我就不说具体答案了
我只提示一点,BufferedInputStream是支持mark()和reset()操作的~
Tips:关于BufferedInputStream的作用,我想你应该已经学过了吧呵呵~
如果还没有学到的话,在张孝祥老师的视频课程中IO部分的《JAVA高级02_11》一节就有详细的讲解
其实知识这种东西,通过自己的努力和思考去弄懂的话,印象会比直接得到答案要深很多很多呢~
[ 本帖最后由 李叶 于 2011-09-01 20:33 编辑 ] |