【发布时间】:2012-05-05 06:56:36
【问题描述】:
当n 为负数时,我正在尝试查找有关java.io.FileInputStream.skip(n) 操作历史的更多信息。根据InputStream documentation:
如果 n 为负数,则不跳过任何字节。
似乎是来自 Sun used to throw IOException 的 FileInputStream 的实现,现在也是 documented in Javadoc:
如果 n 为负数,则抛出 IOException,即使 InputStream 超类的 skip 方法在这种情况下什么也不做。
我刚试过,发现FileInputStream.skip(-10) 实际上返回了-10!它没有抛出异常,它甚至没有返回 0,它返回了 -10。 (我尝试过使用 Sun 的 Java 1.5.0_22 和 Sun 的 Java 1.6.0_18)。
这是一个已知的错误吗?为什么它没有被修复,或者为什么文档保持原样?有人可以指出我对这个问题的一些讨论吗?我什么都找不到。
【问题讨论】:
-
也许它与文档中的这些行有关:此方法可能会跳过比支持文件中剩余的字节更多的字节。这不会产生异常,并且跳过的字节数可能包括超出后备文件 EOF 的一些字节数。在跳过结尾后尝试从流中读取将导致 -1 指示文件的结尾。我在剪贴簿中尝试过,并且收到带有正确消息的 IOException。顺便提一句。没想到会在这里遇到你:)
-
...我用 jdk1.6.0_13 试了一下
-
如果 InputStream 文档明确说“如果 n 为负,则不跳过任何字节”,但 FileInputStream 跳过了,那么它看起来像一个错误。在文档或实现中。
标签: java fileinputstream