我在内存中创建 PDF 文档作为 OutputStream
。这些应该上传到 S3。我的问题是无法直接从 OutputStream
创建 PutObjectRequest
(根据 this thread in the AWS dev forum )。我在 Dropwizard 中使用 aws-java-sdk-s3
v1.10.8应用程序。
目前我能看到的两个解决方法是:
- 将
OutputStream
复制到InputStream
并接受使用两倍的 RAM。 - 将
OutputStream
通过管道传输到InputStream
并接受额外线程的开销(参见 this answer )
如果我找不到更好的解决方案,我会选择 #1,因为在我的设置中,看起来我比线程/CPU 更容易负担得起额外的内存。
有没有其他可能更有效的方法来实现我目前忽略的这一点?
编辑:
我的 OutputStream
是 ByteArrayOutputStream
最佳答案
我通过继承 ConvertibleOutputStream
解决了这个问题:
public class ConvertibleOutputStream extends ByteArrayOutputStream {
//Craetes InputStream without actually copying the buffer and using up mem for that.
public InputStream toInputStream(){
return new ByteArrayInputStream(buf, 0, count);
}
}
关于java - 如何将 Java OutputStream 上传到 AWS S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31805518/