XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setProperty(XMLInputFactory.IS_COALESCING, true);
factory.setProperty(XMLInputFactory2.P_REPORT_PROLOG_WHITESPACE, true);
factory.setProperty(XMLInputFactory2.P_PRESERVE_LOCATION, true);
factory.setProperty(XMLInputFactory2.P_REPORT_TEXT_WHITESPACE, true);
factory.setProperty(XMLInputFactory2.P_REPORT_CDATA_WHITESPACE, true);
factory.setProperty(XMLInputFactory2.P_LEXICAL_HANDLER_PROPERTY, new LexicalHandlerImpl());
XMLStreamReader reader = factory.createXMLStreamReader(inputStream);
XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setProperty(XMLInputFactory.IS_COALESCING, true);
factory.setProperty(XMLInputFactory2.P_REPORT_PROLOG_WHITESPACE, true);
factory.setProperty(XMLInputFactory2.P_PRESERVE_LOCATION, true);
factory.setProperty(XMLInputFactory2.P_REPORT_TEXT_WHITESPACE, true);
factory.setProperty(XMLInputFactory2.P_REPORT_CDATA_WHITESPACE, true);
factory.setProperty(XMLInputFactory2.P_LEXICAL_HANDLER_PROPERTY, new LexicalHandlerImpl());
XMLStreamReader reader = factory.createXMLStreamReader(inputStream);
while (reader.hasNext()) {
int eventType = reader.next();
if (eventType == XMLStreamReader.START_ELEMENT) {
// ...
}
// ...
}
// ...
ExecutorService executor = Executors.newFixedThreadPool(threadCount);
List<InputStream> inputStreams = splitXMLFile(inputStream, threadCount);
List<Future<Result>> results = new ArrayList<>();
for (InputStream input : inputStreams) {
Callable<Result> callable = () -> {
XMLInputFactory factory = XMLInputFactory.newInstance();
// ...
XMLStreamReader reader = factory.createXMLStreamReader(input);
// ...
return result;
};
Future<Result> future = executor.submit(callable);
results.add(future);
}
for (Future<Result> future : results) {
Result result = future.get();
// ...
}
executor.shutdown();