2017-03-31 82 views
7

我最近不得不升級到aws-java-sdk 1.11.108。我有一個java程序,它將s3對象(大小爲8到10 GB)下載到EC2框並將其作爲流處理。這個程序已經工作了超過2年沒有任何問題,但在更新到最新版本的aws-java-sdk後,我的文件下載中止在日誌中出現以下WARN消息(沒有例外)並非所有字節都從S3ObjectInputStream中讀取,正在中止HTTP連接

WARN:com.amazonaws.services.s3.internal.S3AbortableInputStream - Not all bytes were read from the S3ObjectInputStream, aborting HTTP connection. This is likely an error and may result in sub-optimal behavior. Request only the bytes you need via a ranged GET or drain the input stream after use.

S3Object s3Obj = s3client.getObject(new GetObjectRequest(bucketName, s3FileName)); 
Reader reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(s3Obj.getObjectContent()); 

,我將不勝感激,如果有人可以告訴爲什麼流默默地中止W/O拋出任何異常,什麼是使它工作的最佳途徑。

感謝

+0

當將文件直接解壓縮到S3中時,我也有同樣的問題。 – florins

+0

你還有一個俱樂部的地方嗎?我與S3有同樣的問題。 – dcg

+0

我有同樣的問題。到目前爲止,我還沒有解決。 –

回答

0

ZIP壓縮文件有一個(冗餘)中央目錄在 部結構,這樣你就可以通過整個事情列出存檔的內容,而不掃描 。 Java的ZipInputStream實際上從底層流實際上不會消耗 ; getNextEntry()儘快返回null ,因爲它發現中央目錄的開始。 您可以嘗試添加while(in.read()> = 0);在您覆寫的關閉 方法中讀取底層流的結尾?

https://github.com/aws/aws-sdk-java/issues/1111

0

一定要close()輸入流只有一次。

相關問題