簡體   English   中英

性能高效的方式來轉換表示為Writeable的XML數據

[英]Performance-effective way to transform XML data represented as Writeable

我正在研究允許將XML數據轉換為格式化的String實用程序方法,在您認為這對於javax.xml.transform.Transformer來說是一項微不足道的任務之前,讓我解釋一下我所面臨的特定約束。

轉換開始時,輸入數據不存在 實際上,它表示為groovy.lang.Writeablejavadoc )實例,我可以將其輸出到任何java.io.Writer實例中。 方法的簽名如下所示:

static String serializeToString(Writable source)

我當前的解決方案涉及幾個步驟,並且實際上提供了預期的結果:

  1. 創建StringWriter ,在那里輸出source並轉換為String
  2. 基於此字符串創建javax.xml.transform.stream.StreamSource實例(使用StringReader
  3. 創建新的StringWriter實例並將其包裝到javax.xml.transform.stream.StreamResult
  4. 使用javax.xml.transform.Transformer實例執行轉換
  5. StringWriter轉換為String

雖然解決方案確實有效,但我對其效率並不滿意。 這種方法將非常經常使用,我想對其進行優化。 我要避免的是必須沿線執行多次轉換:

  1. 從可Writeable String (未格式化)
  2. StringStreamSource (這意味着將再次解析數據)
  3. 再次從StreamSourceString (格式化)

所以問題是,是否有可能建立消除不必要轉換的類似管道的流?

更新#1:

為了提供更多上下文,我正在使用StreamingMarkupBuilder.bindNode()方法將GPathResult實例轉換為格式化字符串,該方法生成Writable實例。 不幸的是,無法指定StreamingMarkupBuilder來產生格式化的輸出。

更新#2:

我曾經嘗試過基於PipedWriter + PipedReader的實現,但是實驗並未顯示出這種方法帶來的速度提升。 在這種情況下,這似乎不是關鍵問題。

不知道“ XML數據”到底是什么意思,但是您可以考慮將“尚待開發”的東西直接表示為SAXSource,從而繞過“ to-string”和“ parse-string”步驟。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM