前言:今天工作的需要需要讀取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