InputStream流無法重復讀取的解決辦法


前言:今天工作的需要需要讀取aws雲上S3桶里面的PDF數據,第一步能夠正常的獲取PDF文件的InputStream流,然后,我為了測試使用了IOUtils.toString(is)將流System.out.println()輸出后,然后再次使用獲取的流,這時操作失敗,具體如下:

     path = "s3://testpatsnapus/steven/KR/A/10/20/03/00/21/58/8/EM_0001805590063.pdf";
        InputStream ins = AWSS3Utils.downloadAsStream(path);
        System.out.println(IOUtils.toString(ins));
        PdfReader reader = new PdfReader(ins);
        System.out.println(ins.available());
        System.out.println(reader.getNumberOfPages());

開始還不清楚是什么原因,我將System.out.println(IOUtils.toString(ins));注釋后,一切正常。所以這也是我寫這篇文章的初衷,原因就是InputStream流只能夠被利用一次,無法重復讀。

如何重復讀取InputStream中的流呢?

其實網上也給了幾種方法:

  ① 通過將流緩存起來,然后,再次被利用

  ② 如果需要重新讀取流的化,雖然無法重復讀取,但是可以從源頭上解決:重新再獲取一遍流

  ③ 可以通過ByteArrayOutputStream進行轉換處理

 

具體可以參考如下文章:

http://blog.csdn.net/java_mr_zheng/article/details/52457225

http://blog.csdn.net/it_magician/article/details/9240727

http://blog.csdn.net/java_mr_zheng/article/details/52456225


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM