我最近不得不升级到aws-java-sdk 1.11.108。我有一个java程序,它将s3对象(大小为8到10 GB)下载到EC2框并将其作为流处理。这个程序已经工作了2年以上没有任何问题,但在更新到aws-java-sdk的最新版本后,我的文件下载在日志中中止了以下WARN消息(无例外)
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());
如果有人可以告诉我们为什么流静默地中止而没有抛出任何异常,我会很感激,以及使它工作的最佳方法是什么。
由于
答案 0 :(得分:0)
ZIP存档在(冗余)中央目录结构中 结束,这样您就可以在不扫描的情况下列出存档的内容 通过整个事情。 Java的
ZipInputStream
实际上从未消耗过 来自底层流; getNextEntry()尽快返回null 因为它找到了中心目录的开头。 您可以尝试添加while(in.read()> = 0);在你被覆盖的关闭 读取到底层流末尾的方法?
答案 1 :(得分:0)
确保仅close()
输入流一次。