2010-09-14 63 views

回答

10

首先嚐試downcast到javax.xml.transform.stream.StreamSource。如果成功,您可以通過獲得者訪問底層InputStreamReader。這將是最簡單的方法。

如果向下轉換失敗,您可以嘗試使用javax.xml.transform.Transformer將其轉換爲已使用java.io.ByteArrayOutputStream設置的javax.xml.transform.stream.StreamResult。然後你返回java.io.ByteArrayInputStream。喜歡的東西:

 
Transformer t = // getTransformer(); 
ByteArrayOutputStream os = new ByteArrayOutputStream(); 
Result result = new StreamResult(os); 
t.transform(inputSource, result); 
return new ByteArrayInputStream(os.getByteArray()); 

當然,如果StreamSource可以是一個大型文檔,這是不可取的。在這種情況下,您可以使用臨時文件和java.io.FileOutputStream/java.io.FileInputStram。另一種選擇是產生變壓器線程並通過java.io.PipedOutputStream/java.io.PipedInputStream進行通信,但是這更復雜:

 
PipedInputStream is = new PipedInputStream(); 
PipedOutputStream os = new PipedOutputStream(is); 
Result result = new StreamResult(os); 
// This creates and starts a thread that creates a transformer 
// and applies it to the method parameters. 
spawnTransformerThread(inputSource, result); 
return is; 
相關問題