我正在进行一个Java项目,优化现有的代码。目前我正在使用BufferedReader/FileInputStream在Java中读取XML文件的内容作为字符串。
但我的问题是,是否有更快的方法来读取XML内容。SAX/DOM比BufferedReader/FileInputStream更快吗?
需要关于上述问题的帮助。
提前感谢。
我正在进行一个Java项目,优化现有的代码。目前我正在使用BufferedReader/FileInputStream在Java中读取XML文件的内容作为字符串。
但我的问题是,是否有更快的方法来读取XML内容。SAX/DOM比BufferedReader/FileInputStream更快吗?
需要关于上述问题的帮助。
提前感谢。
XMLStreamReader
,你的代码可以在流处理方面变得更加美观,我发现这对许多任务非常有帮助。根据Oracle的说法,该类是“...设计为读取XML数据的最低级别和最有效的方式”(参考链接)。// the input file location
private static final String fileLocation = "/media/My Book/Stack/users.xml";
// the target elements
private static final String USERS_ELEMENT = "users";
private static final String ROW_ELEMENT = "row";
// get the XML file handler
//
FileInputStream fileInputStream = new FileInputStream(fileLocation);
XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance().createXMLStreamReader(
fileInputStream);
// reading the data
//
while (xmlStreamReader.hasNext()) {
int eventCode = xmlStreamReader.next();
// this triggers _users records_ logic
//
if ((XMLStreamConstants.START_ELEMENT == eventCode)
&& xmlStreamReader.getLocalName().equalsIgnoreCase(USERS_ELEMENT)) {
// read and parse the user data rows
//
while (xmlStreamReader.hasNext()) {
eventCode = xmlStreamReader.next();
// this breaks _users record_ reading logic
//
if ((XMLStreamConstants.END_ELEMENT == eventCode)
&& xmlStreamReader.getLocalName().equalsIgnoreCase(USERS_ELEMENT)) {
break;
}
else {
if ((XMLStreamConstants.START_ELEMENT == eventCode)
&& xmlStreamReader.getLocalName().equalsIgnoreCase(ROW_ELEMENT)) {
// extract the user data
//
User user = new User();
int attributesCount = xmlStreamReader.getAttributeCount();
for (int i = 0; i < attributesCount; i++) {
user.setAttribute(xmlStreamReader.getAttributeLocalName(i),
xmlStreamReader.getAttributeValue(i));
}
// all other user record-related logic
//
}
}
}
}
}
用户文件格式非常简单,类似于您的Bank.xml
文件:
<users>
<row Id="1567200" Reputation="1" CreationDate="2012-07-31T23:57:57.770" DisplayName="XXX" EmailHash="XXX" LastAccessDate="2012-08-01T00:55:12.953" Views="0" UpVotes="0" DownVotes="0" />
...
</users>
有不同的解析器选项可用。
考虑使用流式解析器,因为DOM可能会变得非常大。即推送或拉取解析器。
并不是XML解析器一定很慢。考虑你的网络浏览器。它一直在进行XML解析,并努力对语法错误进行鲁棒性处理。通常,内存是更大的问题。