如何将Java OutputStream上载到AWS S3

Eag*_*eak 9 java inputstream outputstream amazon-s3 amazon-web-services

我在内存中创建PDF文档作为OutputStreams.这些应该上传到S3.我的问题是,它无法创建一个PutObjectRequestOutputStream(直接按这个线程在AWS开发论坛).我aws-java-sdk-s3Dropwizard应用程序中使用v1.10.8 .

到目前为止我能看到的两个解决方法是:

  1. 复制OutputStream到a InputStream并接受使用两倍量的RAM.
  2. 管道OutputStream到一个InputStream并接受额外线程的开销(参见这个答案)

如果我找不到更好的解决方案,我会选择#1,因为在我的设置中,它看起来好像能够比线程/ CPU更容易买得起额外的内存.

到目前为止,我是否还有其他任何可能更有效的方式来实现这一目标?

编辑:OutputStreams为ByteArrayOutputStream小号

Eag*_*eak 6

我通过子类化解决了这个问题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);
    }
}
Run Code Online (Sandbox Code Playgroud)