バイナリ ストリームを処理していて、興味のない範囲のデータを効率的にスキップして、処理されるデータにスキップする必要があります。
InputStream.skip(long)
保証の点ではあまり効果がありません:
この入力ストリームから n バイトのデータをスキップして破棄します。skip メソッドは、さまざまな理由で、より少ない数のバイト (場合によっては 0) をスキップすることがあります。これは、いくつかの条件のいずれかが原因である可能性があります。n バイトがスキップされる前にファイルの終わりに到達することは、1 つの可能性にすぎません。スキップされた実際のバイト数が返されます。
次の 2 つのいずれかが発生したことを確認する必要があります。
- ストリームは終了しました
- バイトがスキップされました
十分に単純です。ただし、この説明で許容される寛大さは、たとえば、BufferedInputStream
数バイトをスキップして戻ることができることを意味します。確かに、それらのいくつかだけがスキップされたことがわかりますが、その理由は明らかではありません.
私の質問は次のとおりです。InputStream.skip(long)
ストリームが終了するか、スキップが正常に完了するかを知るような方法で利用できますか?