我一直在乱用Java中的输入/输出。我仍处于机械师的最基本水平。我已经学会了如何使用FileInputStream和FileOutputStream来读取文本文件中的写入数据。
我正在尝试学习使用的FileInputStream类中有两种方法。标记()和重置()。从我读过的小东西,我需要将流包装在缓冲区中。
如果这是真的,那么缓冲对象(不确定是否就是你所说的)不会有自己的标记()和重置()?
如果没有缓冲区就不能使用这些方法,为什么会存在?
答案 0 :(得分:1)
标记/重置可用性与InputStream中缓冲区的存在没有直接关系。任何可以有效回滚其读取指针的InputStream实现"流上的位置应该实现功能。 ByteArrayInputStream是一个InputStream的示例,它不会扩展BufferedInputStream,但能够返回到任何位置,而BufferedInputStream只能返回几个位置(最大可达缓冲区大小)。
答案 1 :(得分:0)
从InputStream
javadoc您可以看到mark()
方法无效。它并没有在FileInputStream
中过载,markSupported()
也没有超过false
,也是FileInputStream
。
因此无法将其与原始FileInputStream
一起使用。但是,您可以将其包装在实现mark()
的{{3}}中。因此缓冲物......
InputStream is = new BufferedInputStream(new FileInputStream(myFile));
is.mark(1024);
...
is.reset();