[英]What happens to InputStream after IOUtils.read()
我正在編寫代碼以驗證最大文件大小。
public static void main(String[] args) throws IOException {
final InputStream inputStream = new FileInputStream(new File("/path/to/image.jpg"));
System.out.println("initial: " + inputStream.read());
int arr = IOUtils.read(inputStream, new byte[2000001]);
if (arr == 2000001) {
System.out.println("file size greater than limit");
}
System.out.println("after: " + inputStream.read());
}
輸出量
initial: 255
file size greater than limit
after: 21
問題是將InputStream傳遞給IOUtils.read()時會發生什么? 繼續前進,當我將相同的InputStream引用傳遞給時,我必須將InputStream保存為圖像 保存方法 s3存儲桶的上傳方法,保存損壞的圖像。 有人可以告訴我發生了什么嗎?
從InputStream讀取內容后,它就“消失了”。 讀取位置沿輸入向上移動。 因此,當您忙於嘗試計算文件中的字節數時,由於沒有存儲數據,因此同時丟失了數據。 因此,一旦傳遞InputStream引用以保存文件,您的閱讀器就不再位於流/文件的開頭,從而導致文件損壞。
您可以通過其他方式獲取文件的大小。
java.io.File file = new java.io.File("example.file");
file.length();
如果文件不是太大,則可以繼續保存文件。 要檢查文件大小,還請檢查@tkausl提供的鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.