2010-11-19 59 views
1

輸出流,其分析依賴性的InputStream的分析類的列表,改變了一些東西,並將其寫入到一個OutputStream:鋼管或交換輸入/ Java中

public Set<Dependency> analyse(InputStream i, OutputStream o); 

的分析應該被鏈接,如:

for(DocumentAnalyser analyser : a) { 
o.getDependencies().addAll(analyser.analyse(in, out)); 
in = new ByteArrayInputStream(out.toByteArray()); 
} 

現在我在一個環境中是最終我工作。

  1. 有沒有更好的方式來「鏈」流?
  2. ByteArrayInputStream的「swap」操作從「out」到「in」是否昂貴?
  3. 如何處理「in」是最終的問題?

回答

1
  1. 使用助手線程和java.io.PipedInputStream/java.io.PipedOutputStream對。
  2. 可能它在大流中表現不佳。
  3. 正如在另一個迴應稱,使用當地的非最終變量做鏈接

注意,通過應用1.你不必擔心2,因爲你實際上管道流。

1

對於問題2
我會提供我自己的子類,具有ByteArrayInputStream的年代和ByteArrayOutputStream緩衝區的直接訪問。這樣你就不會在toByteArray中額外複製腰部記憶和時間。

對於問題3
其分配給當地的一個非最後一個變量,

InputStream nonFinalIn = in; 
for(DocumentAnalyser analyser : a) { 
o.getDependencies().addAll(analyser.analyse(nonFinalIn, out)); 
nonFinalIn = new ByteArrayInputStream(out.toByteArray()); 
} 

要小心,不過,原來的in將不再有效(這將是在最終OF-流)

+0

這種感覺更像是一種解決方法。是否有更好的解決方案像管道來處理Stream? – 2010-11-19 14:18:13