繁体   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