FileInputStream负跳过

时间:2010-03-11 19:21:19

标签: java fileinputstream

java.io.FileInputStream.skip(n)为否定时,我正在尝试查找有关n操作历史的更多信息。根据{{​​3}}:

  

如果n为负数,则不跳过任何字节。

似乎从Sun InputStream documentation实现FileInputStream,现在也是used to throw IOException

  

如果n为负数,则抛出IOException,即使InputStream超类的skip方法在这种情况下不执行任何操作。

我刚试过,发现FileInputStream.skip(-10)确实返回了-10!它没有抛出异常,它甚至没有返回0,它返回-10。 (我尝试过Sun的Java 1.5.0_22和Sun的Java 1.6.0_18。)

这是一个已知的错误吗?为什么没有修复,或者为什么文档保持原样?有人能指点我讨论这个问题吗?我找不到任何东西。

1 个答案:

答案 0 :(得分:0)

SocketInputStream的实际实现提供了答案:

  public long skip(long numbytes) throws IOException {
        if (numbytes <= 0) {
            return 0;
        }
  ...
  }

编辑:对不起,我检查了错误的类FileInputStream的实现是本机的,这是openjdk7中的实现

if ((cur = IO_Lseek(fd, (jlong)0, (jint)SEEK_CUR)) == -1) {
        JNU_ThrowIOExceptionWithLastError(env, "Seek error");
    } else if ((end = IO_Lseek(fd, toSkip, (jint)SEEK_CUR)) == -1) {
        JNU_ThrowIOExceptionWithLastError(env, "Seek error");
    }
    return (end - cur);