java - 从 OMElement 获取输入流

标签 java axiom

我尝试了以下示例[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 接口(interface),您会发现它实际上定义了一个将内容作为 Reader 返回的方法。它称为 getTextAsStream 和 Javadoc解释了如何使用该方法,使内存使用量为 O(1) 而不是 O(N)。

关于java - 从 OMElement 获取输入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23560992/

相关文章:

java - 尝试检索 Spring bean 但不断收到 NullPointerException

java - 静态变量在可运行 jar 中不起作用(hadoop mapreduce)

java - 拾取点的 WorldWind 颜色

java - AVL 树不打印

prolog - 制定效果公理

c# - 公理或 WPF 3D?

java - Firestore按生日日期查询文档,就像只按日和月查询不包括年份?

java - 使用 Axiom 流式传输 XML 节点的内容

java - 将 namespace 添加到 AXIOMXPath

java - 从 Apache Axis2、MTOM 中的 DataHandler 重新读取附件是否安全?