我最近不得不升级到aws-java-sdk 1.11.108。我有一个java程序,下载s3对象(8到10 GB的大小)到EC2盒,并将其作为流处理。此程序已经运行了两年多,没有任何问题,但在更新到最新版本的aws-java-sdk后,我的文件下载中途中止,并在日志中显示以下警告消息(无异常)
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());
如果有人能告诉我为什么流在没有抛出任何异常的情况下静默地中止,以及让它工作的最好方法是什么,我将不胜感激。
谢谢
发布于 2017-06-26 19:53:43
确保只对输入流执行一次close()
操作。
发布于 2017-06-19 16:32:25
压缩文件在最后有一个(冗余的)中央目录结构,所以您可以列出归档文件的内容,而无需扫描整个内容。Java的
ZipInputStream
实际上从不从底层流中使用它;一旦getNextEntry()找到中央目录的开头,它就返回null。您可能会尝试在被覆盖的close方法中添加while (in.read() >= 0);以读取到基础流的末尾?
https://stackoverflow.com/questions/43149369
复制相似问题