当java.io.FileInputStream.skip(n)为负值时,我试图找到更多关于n操作历史的信息。根据InputStream文档
如果n为负,则不跳过任何字节。
似乎FileInputStream的实现来自Sun 用于抛出IOException,现在它也是记录在Javadoc中。
如果n是负的,则抛出一个IOException,即使InputStream超类的skip方法在本例中什么也不做。
我只是尝试了一下,发现FileInputStream.skip(-10)确实返回了-10!它没有抛出异常,甚至没有返回0,它返回了-10。(我尝试过使用Sun的Java 1.5.0_22,以及Sun的Java 1.6.0_18 )。
这是已知的窃听器吗?为什么它没有被修复,或者为什么文档保持它的方式?有人能告诉我关于这个问题的一些讨论吗?我什么都找不到。
发布于 2010-03-11 21:32:49
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);https://stackoverflow.com/questions/2427961
复制相似问题