4

が負のjava.io.FileInputStream.skip(n)ときの操作履歴についてもっと調べようとしています。InputStream のドキュメントnによると:

n が負の場合、バイトはスキップされません。

Sun の FileInputStream の実装は、代わりにIOException をスローしていたようです。これはJavadoc にも記載されています。

n が負の場合、この場合 InputStream スーパークラスの skip メソッドは何もしませんが、IOException がスローされます。

私はそれを試してみたところFileInputStream.skip(-10)、実際に返されたことがわかりました-10! 例外をスローせず、0 を返さず、-10 を返しました。(Sun の Java 1.5.0_22 と Sun の Java 1.6.0_18 を試しました)。

これは既知のバグですか? なぜ修正されていないのですか、またはドキュメントがそのまま維持されているのはなぜですか? 誰かがこの問題についての議論を教えてもらえますか? 何も見つかりません。

4

1 に答える 1

1

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);
于 2010-03-11T21:32:49.717 に答える