這個調用應該是阻塞的,從這個意義上說,它保證了在執行完所有的流之後?ImageIO.read()是異步的嗎?
BufferedImage image = ImageIO.read(inputStream);
我與呼叫ImageIO.read()
參數,「真正的」源(比如,一個FileInputStream)之間坐在一個FilterInputStream打,假設之上,但似乎有一些競態條件 - 難以重現。有時,流在語句執行後只顯示一半消耗。還有第二個相關的疑問:圖像流的「全部」的定義可能是模糊的,例如考慮PNG圖像,在像素數據可以具有一些額外的元數據之後(在IEND組塊之前,的圖像流)。我可以期望ImageIO.read()
將讀取(除了競爭條件)所有圖像,還是可能發生該方法只消耗獲得像素值所需的內容?
你在這兩方面看起來都對。我的問題是由於第二個問題;不是一個錯誤,而是......「[這是低效率的讀取超過必要的填充],嗯,嚴格地說,沒有IEND塊的PNG格式不正確,但我想沒人真的檢查這些東西... – leonbloy
@leonbloy - 我說的另一種說法是,執行應用程序不需要的額外驗證是低效的。如果應用程序只需要圖像部分,那麼後面的東西*的有效性可能*無關緊要。 (事實上,PNG格式設計師可能會把這些東西放在最後,以便在大多數情況下可以避免*讀取/解析它。) –