当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。)
这是一个已知的错误吗?为什么没有修复,或者为什么文档保持原样?有人能指点我讨论这个问题吗?我找不到任何东西。
答案 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);