Jak używać Java NIO do przetwarzania XML?

Dec 01, 2025

Zostaw wiadomość

W świecie programowania w języku Java pojawił się pakiet Java NIO (Nowe wejście/wyjście) jako potężny zestaw interfejsów API, który oferuje bardziej wydajny i elastyczny sposób obsługi operacji wejścia i wyjścia w porównaniu z tradycyjnymi wejściami/wyjściami Java. Jeśli chodzi o przetwarzanie XML, Java NIO może zmienić reguły gry, zapewniając wysoką wydajność i możliwości nieblokujące. Jako dostawca NIO byłem na własne oczy świadkiem korzyści płynących z używania Java NIO do przetwarzania XML i na tym blogu podzielę się z Tobą, w jaki sposób możesz wykorzystać te funkcje do usprawnienia zadań związanych z przetwarzaniem XML.

Zrozumienie podstaw Java NIO

Zanim zagłębimy się w przetwarzanie XML, przyjrzyjmy się pokrótce podstawowym komponentom Java NIO. Java NIO skupia się wokół trzech głównych koncepcji: kanałów, buforów i selektorów.

  • Kanały: Kanały są podobne do tradycyjnych strumieni w wejściach/wyjściach Java, ale są dwukierunkowe i obsługują operacje nieblokujące. Działają jak bramy do obiektu takiego jak plik, gniazdo itp. Na przykład: aKanał plikumożna używać do odczytu lub zapisu do pliku.
  • Bufory: Bufory to pojemniki na dane. Przechowują stałą ilość danych określonego typu pierwotnego. Typowe typy buforów obejmująBufor bajtów,CharBufferitp. Dane są odczytywane z kanału do bufora i zapisywane z bufora do kanału.
  • Selektory: Selektory umożliwiają pojedynczemu wątkowi obsługę wielu kanałów. Jest to szczególnie przydatne w aplikacjach po stronie serwera, gdzie trzeba efektywnie zarządzać dużą liczbą połączeń.

Odczyt plików XML za pomocą Java NIO

Jednym z najczęstszych zadań przetwarzania XML jest odczytywanie plików XML. Dzięki Java NIO możesz użyć plikuKanał plikuaby wczytać plik XML do plikuBufor bajtów. Oto prosty przykład:

importuj wyjątek java.io.IO; importuj java.nio.ByteBuffer; importuj java.nio.channels.FileChannel; importuj java.nio.file.Path; importuj java.nio.file.Paths; importuj java.nio.file.StandardOpenOption; klasa publiczna XMLFileReader { public static void main(String[] args) { Ścieżka ścieżki = Paths.get("example.xml"); try (kanał FileChannel = FileChannel.open(path, StandardOpenOption.READ)) { Bufor ByteBuffer = ByteBuffer.allocate(1024); int bajtówOdczyt; while ((bytesRead = kanał.odczyt(bufor)) != -1) { bufor.flip(); while (buffer.hasRemaining()) { System.out.print((char) bufor.get()); } bufor.clear(); } } catch (IOException e) { e.printStackTrace(); } } }

W tym kodzie najpierw otwieramy plik aKanał plikudo odczytu pliku XML. Następnie przydzielamy aBufor bajtówdo przechowywania danych odczytanych z pliku. Wczytujemy dane z kanału do bufora, odwracamy bufor, aby przygotować go do odczytu, a następnie drukujemy dane. Na koniec czyścimy bufor, aby przygotować się do następnej operacji odczytu.

Parsowanie danych XML

Po przeczytaniu danych XML należy je przeanalizować. Java udostępnia kilka interfejsów API do analizowania XML, takich jak DOM (Document Object Model), SAX (Simple API for XML) i StAX (Streaming API for XML).

Używanie DOM z Java NIO

Parser DOM tworzy w pamięci drzewiastą strukturę dokumentu XML. Oto jak możesz połączyć Java NIO z parserem DOM:

importuj java.io.ByteArrayInputStream; importuj wyjątek java.io.IO; importuj java.nio.ByteBuffer; importuj java.nio.channels.FileChannel; importuj java.nio.file.Path; importuj java.nio.file.Paths; importuj java.nio.file.StandardOpenOption; importuj javax.xml.parsers.DocumentBuilder; importuj javax.xml.parsers.DocumentBuilderFactory; importuj wyjątek javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.xml.sax.SAXException; klasa publiczna DOMXMLParser { public static void main(String[] args) { Ścieżka ścieżki = Paths.get("example.xml"); try (kanał FileChannel = FileChannel.open(path, StandardOpenOption.READ)) { Bufor ByteBuffer = ByteBuffer.allocate(1024); StringBuilder xmlContent = nowy StringBuilder(); int bajtówOdczyt; while ((bytesRead = kanał.odczyt(bufor)) != -1) { bufor.flip(); while (buffer.hasRemaining()) { xmlContent.append((char) bufor.get()); } bufor.clear(); } Fabryka DocumentBuilderFactory = DocumentBuilderFactory.newInstance(); Kreator DocumentBuilder = Factory.newDocumentBuilder(); Dokument dokumentu = builder.parse(new ByteArrayInputStream(xmlContent.toString().getBytes())); // Teraz możesz przeglądać drzewo DOM System.out.println(doc.getDocumentElement().getNodeName()); } catch (IOException | ParserConfigurationException | SAXException e) { e.printStackTrace(); } } }

W tym przykładzie najpierw czytamy plik XML przy użyciu Java NIO i przechowujemy zawartość w pliku aKonstruktor ciągów. Następnie tworzymyKreator dokumentówi analizuj zawartość XML za pomocą metodyanalizowaćmetoda.

Używanie SAX z Java NIO

Parser SAX jest parserem opartym na zdarzeniach. Analizuje dokument XML sekwencyjnie i uruchamia zdarzenia, gdy napotka różne elementy XML. Oto przykład użycia SAX z Java NIO:

importuj java.io.ByteArrayInputStream; importuj wyjątek java.io.IO; importuj java.nio.ByteBuffer; importuj java.nio.channels.FileChannel; importuj java.nio.file.Path; importuj java.nio.file.Paths; importuj java.nio.file.StandardOpenOption; importuj javax.xml.parsers.SAXParser; importuj javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; klasa publiczna SAXXMLParser { public static void main(String[] args) { Ścieżka ścieżki = Paths.get("example.xml"); try (kanał FileChannel = FileChannel.open(path, StandardOpenOption.READ)) { Bufor ByteBuffer = ByteBuffer.allocate(1024); StringBuilder xmlContent = nowy StringBuilder(); int bajtówOdczyt; while ((bytesRead = kanał.odczyt(bufor)) != -1) { bufor.flip(); while (buffer.hasRemaining()) { xmlContent.append((char) bufor.get()); } bufor.clear(); } Fabryka SAXParserFactory = SAXParserFactory.newInstance(); Parser SAXParser = fabryka.newSAXParser(); parser.parse(new ByteArrayInputStream(xmlContent.toString().getBytes()), new DefaultHandler() { @Override public void startElement(String uri, String localName, String qName, atrybuty atrybuty) zgłasza wyjątek SAXException { System.out.println("Element początkowy: " + qName); } @Override public void endElement(String uri, String localName, String qName) zgłasza wyjątek SAXException { System.out.println("Element końcowy: " + qName) }); } catch (IOException | SAXException | javax.xml.parsers.ParserConfigurationException e) { e.printStackTrace(); } } }

W tym kodzie odczytujemy dane XML za pomocą Java NIO, a następnie używamy aSAXParseranalizować dane. Zastępujemyelement startowyIelement końcowymetodyDomyślna obsługado obsługi początku i końca elementów XML.

Zapisywanie plików XML za pomocą Java NIO

Zapisywanie plików XML za pomocą Java NIO wymaga utworzenia plikuKanał plikudo zapisu i zapisu danych z bufora do kanału. Oto przykład:

importuj wyjątek java.io.IO; importuj java.nio.ByteBuffer; importuj java.nio.channels.FileChannel; importuj java.nio.file.Path; importuj java.nio.file.Paths; importuj java.nio.file.StandardOpenOption; public class XMLFileWriter { public static void main(String[] args) { String xmlData = "<root><element>Witaj, świecie!</element></root>"; Ścieżka ścieżki = Paths.get("output.xml"); try (Kanał FileChannel = FileChannel.open(path, StandardOpenOption.CREATE, StandardOpenOption.WRITE)) { Bufor ByteBuffer = ByteBuffer.wrap(xmlData.getBytes()); kanał.zapis(bufor); } catch (IOException e) { e.printStackTrace(); } } }

W tym przykładzie tworzymy plikKanał plikudo zapisywania i zawijania danych XML w formacie aBufor bajtów. Następnie zapisujemy bufor do kanału.

55

Korzyści z używania Java NIO do przetwarzania XML

  • Wydajność: Nieblokujące operacje we/wy Java NIO mogą znacznie poprawić wydajność, szczególnie w przypadku jednoczesnej pracy z dużymi plikami XML lub wieloma zadaniami przetwarzania XML.
  • Elastyczność: Kombinacja kanałów i buforów zapewnia większą elastyczność w obsłudze danych w porównaniu z tradycyjnymi wejściami/wyjściami Java.
  • Skalowalność: Dzięki zastosowaniu selektorów Java NIO może efektywnie obsługiwać dużą liczbę zadań przetwarzania XML, dzięki czemu nadaje się do zastosowań na dużą skalę.

Powiązane produkty NIO

Jako dostawca NIO oferujemy również szeroką gamę wysokiej jakości pojazdów na nowe źródła energii, takich jak2025 NIO ES7,Nowy NIO ET5, INowy NIO ET9. Pojazdy te są wyposażone w zaawansowane technologie i oferują doskonałe osiągi i komfort.

Wniosek

Java NIO zapewnia potężny i efektywny sposób obsługi zadań przetwarzania XML. Wykorzystując funkcje kanałów, buforów i selektorów, możesz poprawić wydajność i skalowalność aplikacji przetwarzających XML. Niezależnie od tego, czy czytasz, analizujesz, czy piszesz pliki XML, Java NIO może być cennym narzędziem w Twoim arsenale programistycznym.

Jeśli są Państwo zainteresowani naszymi produktami NIO lub mają Państwo jakiekolwiek pytania dotyczące Java NIO do przetwarzania XML, prosimy o kontakt w celu zamówienia i dalszych dyskusji. Zależy nam na dostarczaniu najlepszych rozwiązań odpowiadających Twoim potrzebom.

Referencje

  • „Efektywna Java” Joshuy Blocha
  • Dokumentacja Java NIO firmy Oracle
  • Samouczki dotyczące przetwarzania XML na oficjalnej stronie Java

Wyślij zapytanie