gpt4 book ai didi

java - FileInputStream 负向跳过

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:19:41 27 4
gpt4 key购买 nike

n 为负数时,我正在尝试查找有关 java.io.FileInputStream.skip(n) 操作历史的更多信息。根据InputStream documentation :

If n is negative, no bytes are skipped.

似乎 FileInputStream 的实现来自 Sun used to throw IOException相反,现在也是 documented in Javadoc :

If n is negative, an IOException is thrown, even though the skip method of the InputStream superclass does nothing in this case.

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

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

最佳答案

SocketInputStream的实际实现给出了答案:

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

编辑:抱歉,我检查了错误的类 FileInputStreams implementation is native 这是 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);

关于java - FileInputStream 负向跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2427961/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com