我有一个在 S3 上做很多工作的应用程序,主要是从中下载文件。我看到很多此类错误,我想知道这是否是我的代码中的问题,或者服务是否真的像这样不可靠。
我用来从 S3 对象流读取的代码如下:
public static final void write(InputStream stream, OutputStream output) {
byte[] buffer = new byte[1024];
int read = -1;
try {
while ((read = stream.read(buffer)) != -1) {
output.write(buffer, 0, read);
}
stream.close();
output.flush();
output.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
This 输出流 is a 新的 BufferedOutputStream( 新的 FileOutputStream( 文件 ) )。我正在使用最新版本的 Amazon S3 Java 客户端,并且此调用已重试four放弃之前的次数。所以,尝试了4次之后,仍然失败。
任何有关我如何改进这一点的提示或技巧都将受到赞赏。
我刚刚设法克服了一个非常相似的问题。就我而言,我得到的异常是相同的;对于较大的文件会发生这种情况,但对于小文件则不会,并且在单步执行调试器时根本不会发生这种情况。
问题的根本原因是 AmazonS3Client 对象在下载过程中被垃圾收集,从而导致网络连接中断。发生这种情况是因为我在每次调用加载文件时都构建了一个新的 AmazonS3Client 对象,而首选用例是创建一个持久的客户端对象,该对象在调用过程中仍然存在,或者至少保证在整个调用过程中都存在。下载。因此,简单的补救措施是确保保留对 AmazonS3Client 的引用,以免它被 GC 回收。
AWS 论坛上对我有帮助的链接如下:https://forums.aws.amazon.com/thread.jspa?threadID=83326 https://forums.aws.amazon.com/thread.jspa?threadID=83326
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)