无缓冲的FileInputStream不支持.mark(int)

时间:2014-12-30 16:34:55

标签: java fileinputstream

我一直在乱用Java中的输入/输出。我仍处于机械师的最基本水平。我已经学会了如何使用FileInputStream和FileOutputStream来读取文本文件中的写入数据。

我正在尝试学习使用的FileInputStream类中有两种方法。标记()和重置()。从我读过的小东西,我需要将流包装在缓冲区中。

如果这是真的,那么缓冲对象(不确定是否就是你所说的)不会有自己的标记()和重置()?

如果没有缓冲区就不能使用这些方法,为什么会存在?

2 个答案:

答案 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();