この呼び出しは、実行後に「すべて」ストリームが読み取られたことが保証されているという意味で、ブロックされているはずですか?
BufferedImage image = ImageIO.read(inputStream);
ImageIO.read()
上記を想定して、呼び出し引数と「実際の」ソース(たとえば、FileInputStream)の間にある FilterInputStream で遊んでいましたが、いくつかの競合状態があるようです-再現が困難です。ステートメントの実行後、ストリームが半分しか消費されていないように見えることがあります。
関連する 2 番目の疑問があります。イメージ ストリームの「すべて」の定義があいまいになる可能性があります。たとえば、ピクセル データの後に追加のメタデータを含めることができる PNG イメージを考えてみましょう (イメージ ストリームの真の終了を通知する IEND チャンクの前)。 )。(競合状態を除いて)すべての画像を読み取ることを期待できますかImageIO.read()
、それともメソッドがピクセル値を取得するために必要なものだけを消費する可能性がありますか?