【发布时间】:2011-08-09 23:50:59
【问题描述】:
我正在做一个从 http 解析 XML 文件的程序。 并且 XML 在根标签的前面有一些空间。
所以,我需要在解析 XML 之前对其进行修剪。
这是我写的方法,
private String trimXML(InputStream inputStream){
Writer writer = null;
try{
writer = new StringWriter();
char[] buffer = new char[Constants.BUFFER_SIZE];
try {
Reader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
int n = 0;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return writer.toString().trim();
}catch(NullPointerException e){
return null;
}
}
现在我面临一个大问题是在我请求 XML 几次后,内存不足错误是 get...
谁能给我一些建议来解决它?
【问题讨论】:
-
你可以使用dom解析器吗? DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = dbfac.newDocumentBuilder();输入流是=???; doc = docBuilder.parse(is);
-
为什么要修剪它?如果您从其他地方请求 xml,则在处理它时使用 SAX 解析器对其进行解析,而不必将完整的 XML 文档加载到内存中。此外,检查内存泄漏(修剪后对 XML 的引用发生了什么,它们是否由于某种原因而存在?)。
-
DOM 解析器仍然需要在解析 XML 之前完全加载并映射到内存中。 SAX 解析器允许在加载流时处理 XML。
-
squawknull,我正在使用 SAX 解析器。并且错误消息总是指出 char[] buffer = new char[Constants.BUFFER_SIZE];是通过错误。常量.BUFFER_SIZE = 819200
标签: java android xml sax xml-parsing