ができるdatainputstreamま.skipBytes(n)ないスキップnバイト?

StackOverflow https://stackoverflow.com/questions/51380

  •  09-06-2019
  •  | 
  •  

質問

日文書概.skipBytes るとともに"するようにしてスキップからのデータをnバイトの入力ストリームを破棄しスキップバイトまでとなります。しかし、スキップnより少ないバイト数(ゼロになります。この結果、数多くの条件ファイルの終わりに達の前に、nバイトをスキップすことがあります。"

  1. 以外のファイルの終わりに達しょう skipBytes() ないスキップ右のバイト数?( DataInputStream を使用していますラッピング FileInputStream または PipedInputStream.)

  2. ばしたいと思っていskip nバイトず EOFException この原因の末にファイルのどちらを使うべき readFully() 無視する結果のバイト配列?がありそうです。

役に立ちましたか?

解決

1)がない場合もそのデータを読む(その他のパイプなどで送信するデータをもとに実装するクラスが非ブロック(でも何で待つだけではなく、十分なデータを満たすにあります。

わからない場合は実装が実際にどのように行動しこのように、しかし、そのインタフェースを許可することがあります。

別のオプションを簡単にファイルは閉じたパートの読み出します。

2)のいずれかreadFully()を常に待ちに十分な入力または他の不可または電話skipBytes()、ループを実行します。と思うのは、多くの場合を除き、配列は本当に幅広さなどです。

他のヒント

またこの問題です。また、ネットワーク接続を仮想マシンでは想像ができる理由はいくつかありますがこの部品が追加されています。私は解決するだけで強制的に入力ストリームをスキップバイトまでスキップされたバイト数にして欲しいという事です:

int byteOffsetX = someNumber; //n bytes to skip
int nSkipped = 0;

nSkipped = in.skipBytes(byteOffsetX);
while (nSkipped < byteOffsetX) {
    nSkipped = nSkipped + in.skipBytes(byteOffsetX - nSkipped);
}

ジブロッホは践的なことです。で一貫してこのInputStream.読み取らを保証するものではありません、多くのバイト数です。しかし、全く無意味としてのAPI方法です。InputStreamそのものreadFully.

ここで示されているデータreadFully()を使用したパフォーマンスの向上架していた以上にたくとも戦っています。

悩んだ末に妥協:私skipBytes()は、一度場を返しますが、右のバイト数であり、私はreadFully()のバイトです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top