【发布时间】:2014-05-11 05:32:05
【问题描述】:
我尝试了以下示例 [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));
【问题讨论】:
-
为什么需要输入流?您要将它传递给哪些其他代码?它必须是输入流还是你可以使用其他技术,例如如果您的目标 API 可以充当 SAX 内容处理程序,那么您可以直接从 OM 树转到该处理程序,而无需在途中通过纯 XML。
-
我再次需要从自定义类中的 Inputstream 读取内容。 'fileContent' 具有 OMElement。我们可以使用其他技术,但我需要阅读内容。我的 OMElement 包含一个大文件内容,(带有一系列文本/字符)我逐行读取并在我的自定义类中进行处理
-
"逐行"在处理 XML 时有点危险,因为它表明您正在尝试将 XML 视为纯文本,尤其是在此例如,单参数
InputStreamReader构造函数将忽略编码声明,并始终将流视为当前平台的默认编码。如果这是一个自定义类,那么为什么不能直接将OMElement传递给它,让它遍历已经解析的 XML 树本身呢? -
我在做字符串操作,不确定我能不能直接用 OMelement..while (in.ready()) { StringBuffer output = new StringBuffer();字符串行 = in.readLine(); if (row.length() == 902) { append(output, row.substring(0, 4), false);追加(输出,row.substring(4, 64),假);追加(输出,row.substring(64, 73),假);