簡體   English   中英

從OMElement獲取InputStream

[英]Getting InputStream from OMElement

我嘗試了以下樣本[1]; 但是由於我的OMElement太大(我正在將文件(800MB)轉換為OMelement ,它來自另一個進程),因此我面臨以下問題,

  • 進程內存不足
  • 序列化需要很多時間。

誰能為我指出正確的解決方案?

[1]

 BufferedReader in = null;
 ByteArrayOutputStream baos = null;
 InputStream is = null;
 try {

    baos = new ByteArrayOutputStream();
    fileContent.serialize(baos);

    is = new ByteArrayInputStream(baos.toByteArray());

    in = new BufferedReader(new InputStreamReader(is));

不幸的是,您的問題並未提供對要解決的實際問題的清晰描述。 相反,它描述了一個您認為可以解決問題的問題。 因此,我只能根據您對Ian Roberts的評論來重構問題。

如果我對這些評論的解釋正確,那么問題如下。 您有一個XML文檔,其中包含帶有長字符序列的元素,該元素由多行構成:

<some_element>
line 1
line 2
line 3
...
line N
</some_element>

您希望逐行處理元素的內容,但是N很大,因此您需要找到一種內存有效的方式來做到這一點,即避免將整個內容加載到內存中的方法。

您提供的代碼段表明,嘗試解決該問題時方向錯誤。 該代碼對表示some_elementOMElement序列化,然后從序列化的輸出中創建InputStream / Reader 但是,它也將包含some_element的開始和結束標記,這不是您想要的。 相反,您只對元素的內容感興趣。 如果查看OMElement接口,則可以看到它實際上定義了一個將內容作為Reader返回的方法。 它稱為getTextAsStreamJavadoc解釋了如何以內存使用量為O(1)而不是O(N)的方式使用該方法。

暫無
暫無

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

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