簡體   English   中英

IOUtils.read()之后InputStream會發生什么

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM