Schnellste und optimierte Möglichkeit, das XML zu lesen

8

Ich habe dies unter XML-Datei

%Vor%

Jetzt wird das Java-Programm zum Lesen von Daten aus einer XML-Datei angezeigt.

%Vor%

und das Ergebnis war ..

%Vor%

Jetzt ist meine Frage bitte beraten, gibt es eine andere Möglichkeit, die am schnellsten ist, diese XML zu lesen, ich suchte die schnellsten, bitte beraten .. !!

    
user1633823 04.09.2012, 18:41
quelle

3 Antworten

18

Mit ReadAndPrintXMLFileWithStAX unten, wenn ich mit ReadAndPrintXMLFileWithSAX aus der Antwort von gontard vergleiche, ist der StAX-Ansatz schneller. Mein Test beinhaltete die Ausführung des Beispielcodes 500000 mal auf JDK 1.7.0_07 für den Mac.

%Vor%

ReadAndPrintXMLFileWithStAX (mit Java SE 7)

Unten finden Sie ein besser optimiertes StAX-Beispiel (JSR-173) mit XMLStreamReader anstelle von XMLEventReader .

%Vor%

Ausgabe

%Vor%     
Blaise Doughan 05.09.2012, 01:13
quelle
7

Wenn die Leistungen in Ihrem Fall wichtig sind, sollten Sie SAX oder StAX (http: //en.wikipedia .org / wiki / StAX) zu DOM .

Mit DOM wird die Datei XML in einem ersten Mal in ein Objektmodell geparst, das Sie dann fragen können. Also für Sie Algorithmus gibt es zwei Pass.

Bei SAX werden während der Syntaxanalyse einige Callbacks aufgerufen ( startDocument , endElement ...), SAX ist ereignisbasiert oder ein Push-Modell .

Mit StAX steuern Sie das Parsing. Sie bewegen einen Cursor von einem Element zu einem anderen. Dies ist ein Pull-Modell .

Bei einer Datei mit 32910000 Personen vergleiche ich meine Version mit SAX mit der Überantwort (von Blaise Doughan) mit StAX . Ich entferne alle System.out.println instrusctions. Mein Programm brauchte 106 Sekunden, um die gesamte Datei zu lesen, und das andere dauerte 94 Sekunden. Ich nehme an, dass SAX langsamer ist, weil alle callback aufgerufen werden, auch wenn sie nichts tun (das Push-Modell ), während bei StAX der Cursor nur auf die "interresting" -Elemente (das < em> Modell ziehen ).

Zum Beispiel mit Java 7:

%Vor%     
gontard 04.09.2012 20:56
quelle
1

Ein Stax-Beispiel

%Vor%


Ausgabe:

%Vor%     
Mike 04.09.2012 19:50
quelle

Tags und Links