首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileInputStream负跳

FileInputStream负跳
EN

Stack Overflow用户
提问于 2010-03-11 19:21:18
回答 1查看 1.7K关注 0票数 4

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 )。

这是已知的窃听器吗?为什么它没有被修复,或者为什么文档保持它的方式?有人能告诉我关于这个问题的一些讨论吗?我什么都找不到。

EN

回答 1

Stack Overflow用户

发布于 2010-03-11 21:32:49

SocketInputStream的精确实现给出了答案:

代码语言:javascript
复制
  public long skip(long numbytes) throws IOException {
        if (numbytes <= 0) {
            return 0;
        }
  ...
  }

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

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2427961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档