0

我尝试了以下示例 [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));
4

1 回答 1

1

不幸的是,您的问题没有清楚地描述您要解决的实际问题。相反,它描述了您认为可以解决问题的问题。因此,我只能根据您对 Ian Roberts 的评论来尝试重建问题。

如果我对这些评论的解释是正确的,那么问题如下。您有一个 XML 文档,其中包含一个具有长字符序列的元素,该元素被结构化为多行:

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

您想逐行处理元素的内容,但 N 很大,因此您需要找到一种内存有效的方法来执行此操作,即避免将整个内容加载到内存中的方法。

您提供的代码片段表明您在尝试解决该问题时采取了错误的方向。代码序列化OMElement表示,然后从序列化的输出中some_element创建InputStream/ 。Reader但是,这也将包含 的开始和结束标记some_element,这不是您想要的。相反,您只对元素的内容感兴趣。如果查看OMElement接口,您会发现它实际上定义了一个方法,该方法将该内容作为Reader. 它被调用getTextAsStreamJavadoc解释了如何以这样一种方式使用该方法,即内存使用量为 O(1) 而不是 O(N)。

于 2014-05-10T21:32:05.693 回答