我看到ImageIO.read()方法有一個奇怪的行爲。Image IO奇怪的行爲重置輸入流
我將InputStream傳遞給此方法,並且當我第二次嘗試讀取它時,它無法讀取並返回null。
我正嘗試將圖像上傳到Amazon S3,我想創建3個圖像版本。原始和2個縮略圖。我的問題是,當我想創建2個縮略圖時,我需要使用ImageIO.read()讀取InputStream。如果我爲相同的InputStream運行此方法2,則第二次讀取時會得到空值。
我可以通過只讀一個並將相同的BufferedImage傳遞給縮放方法來繞過這個問題。不過,我仍然需要將InputStream傳遞給其他AmazonS3服務以便上傳原始文件。
所以我的問題是沒有人知道ImageIO第一次讀取輸入流後會發生什麼?
下面
public String uploadImage(InputStream stream, String filePath, String fileName, String fileExtension) {
try {
String originalKey = filePath + fileName + "." + fileExtension;
String smallThumbKey = filePath + fileName + ImageConst.Path.SMALL_THUMB + "." + fileExtension;
String largetThumbKey = filePath + fileName + ImageConst.Path.LARGE_THUMB + "." + fileExtension;
BufferedImage image = ImageIO.read(stream);
InputStream smallThumb = createSmallThumb(image, fileExtension);
InputStream largeThumb = createLargeThumb(image, fileExtension);
uploadFileToS3(originalKey, stream);
uploadFileToS3(smallThumbKey, smallThumb);
uploadFileToS3(largetThumbKey, largeThumb);
return originalKey;
} catch (IOException ex) {
Logger.getLogger(ManageUser.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
+1我還建議使用「markSupported()」來檢查原始輸入流是否支持標記,只有當原始輸入流不支持標記時才使用緩衝流。 –