![](/img/trans.png)
[英]Java OutputStream of Postgres export directly to InputStream of S3 upload
[英]How to upload a Java OutputStream to AWS S3
我在內存中創建PDF文檔作為OutputStream
。 這些應該上傳到S3。 我的問題是不可能直接從OutputStream
創建一個PutObjectRequest
(根據AWS dev論壇中的這個線程 )。 我在Dropwizard應用程序中使用aws-java-sdk-s3
v1.10.8。
到目前為止我能看到的兩個解決方法是:
OutputStream
復制到InputStream
並接受使用兩倍量的RAM。 OutputStream
傳遞給InputStream
並接受額外線程的開銷(請參閱此答案 ) 如果我沒有找到更好的解決方案,我會選擇#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);
}
}
OutputStream
的實際類型是什么? 因為它是一個抽象類,所以沒有說數據實際上在哪里(或者甚至在任何地方)。
但是我們假設您正在談論ByteArrayOutputStream
因為它至少將數據保存在內存中(與許多其他數據不同)。
如果從其緩沖區中創建ByteArrayInputStream
,則沒有重復的內存。 這就是整個流媒體的想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.