Moh*_*ana 1 java xml information-retrieval data-mining xml-parsing
我正在研究一个java项目来优化现有代码.目前我正在使用BufferedReader/FileInputStream在Java中将XML文件的内容读取为String.
但我的问题是,有没有更快的方式来读取XML内容.SAX/DOM比BufferedReader/FileInputStream快吗?
需要有关上述问题的帮助.
提前致谢.
我认为你在其他问题中显示的代码比类似DOM的解析器更快,这肯定需要更多的内存和可能的一些计算才能完整地重建文档.您可能想要分析代码.
如果你使用javax XMLStreamReader,我也认为你的代码可以为流处理做一些调整,我觉得这对很多任务很有帮助.据Oracle称,该类是"......旨在成为读取XML数据的最低级别和最有效的方式".
以下是我的代码摘录,其中我解析了作为公共数据转储分发的StackOverflow用户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
//
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
用户文件格式非常简单,与您的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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7700 次 |
| 最近记录: |