我在做一个程序来解析来自http的XML文件。 而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几次之后,内存不足的错误就是让...
任何人都可以给我一些建议来解决它?
u可以使用DOM解析器? DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); \t \t \t \t DocumentBuilder docBuilder = dbfac.newDocumentBuilder(); \t \t \t \t InputStream is = ???; \t \t doc = docBuilder.parse(is); – 2011-04-21 03:20:00
为什么要修剪它?如果您从别处请求xml,则使用SAX解析器在处理它时解析它,而不必在内存中加载完整的XML文档。另外,检查内存泄漏(修剪它后XML引用发生了什么,出于某种原因它们是否在附近?)。 – squawknull 2011-04-21 03:22:14
DOM解析器仍然需要将XML完全加载并映射到内存中,然后才能对其进行解析。 SAX解析器允许在加载流时处理XML。 – squawknull 2011-04-21 03:23:28