[英]Chunkwise-Copy data from InputStream to OutputStream + getting byte[] at the end
我知道如何將chunkwise從InputStream
復制到OutputStream
。
我知道如何從InputStream
獲取byte[]
。
但是如何一步到位呢? 是否有一個OutputStream可以通過管道傳輸並緩沖所有寫入的字節,以便它可以在結尾返回一個byte []?
我需要像ByteArrayOutputStream
這樣的東西,但可以用管道傳輸。 (例如,到FileOutputStream)
或者我需要像MultiOutputStream
這樣可以轉發到多個OutputStream的東西。 使用Guava和/或Apache Commons的解決方案是首選。 :)
你應該看一下Apache的TeeOutputStream
: https : TeeOutputStream
擴展OutputStream並通過在兩個內部流(ByteArrayOutputStream和FileOutputStream)上包裝(如裝飾器)來創建自定義MultiOutputStream。 您可以將兩個流作為構造函數args。 覆蓋相應的寫入方法並寫入兩個目標流。
例如
class MultiOuputStream extends OutputStream {
private OutputStream stream1;
private OutputStream stream2;
public MultiOuputStream(){
// can throw exception, not supported
}
public MultiOuputStream(OutputStream stream1, OutputStream stream2){
this.stream1 = stream1;
this.stream2 = stream2;
}
@Override
public write(byte[] bytes) throws IOException {
stream1.write(bytes);
stream2.write(bytes);
}
...
...
}
我考慮使用TeeOutputStream ,但是它的close() - Method在關閉主流時沒有關閉分支流拋出異常。 因此,當發生異常時,我必須自己關閉分支流。 由於java的流鏈接的概念,這是非常不切實際的。 由於這種行為至少沒有記錄,我稱之為bug 。
當我使用ByteArrayOutputStream作為TeeOutputStreams分支到的流之一時,這不是一個真正的問題。 但這只是因為不能關閉ByteArrayOutputStreams 。
這就是我編寫MultiOutputStream的原因。 它與TeeOutputStream非常相似,但即使在兩者之間出現異常時也會關閉其底層流。 此外,它允許多個分支流,而不僅僅是一個。
編輯
今天修復了TeeOutputStream中的錯誤。 它將與Commons IO 2.2一起發布。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.