W dziedzinie programowania w języku Java pakiet Java NIO (Nowe wejście/wyjście) oferuje potężny i wydajny sposób obsługi operacji we/wy, szczególnie w scenariuszach, w których wymagana jest duża współbieżność i nieblokujące operacje we/wy. Jednym z kluczowych komponentów Java NIO jestSelektor, co pozwala pojedynczemu wątkowi zarządzać wieloma kanałami. Na tym blogu, jako dostawca NIO, będę zagłębiać się w to, jak uzyskać gotowy zestaw z selektora Java NIO.
Zrozumienie selektora NIO Java
Zanim omówimy, jak uzyskać gotowy zestaw, konieczne jest zrozumienie, czym jest aSelektorJest. ASelektorw Javie NIO to obiekt, którego można używać do monitorowania wielu obiektówMożliwość wyboru kanałuobiekty dla różnych zdarzeń we/wy, takich jak odczyt, zapis, łączenie i akceptowanie. Umożliwia pojedynczemu wątkowi obsługę wielu kanałów, znacznie poprawiając wydajność aplikacji.
Aby użyćSelektor, najpierw musimy go utworzyć. Oto prosty fragment kodu umożliwiający utworzenie plikuSelektor:
importuj java.nio.channels.Selector; importuj wyjątek java.io.IO; klasa publiczna SelectorExample { public static void main(String[] args) { try { Selektor selektora = Selector.open(); System.out.println("Otwarto selektor: " + selektor); } catch (IOException e) { e.printStackTrace(); } } }
W tym kodzie używamyOtwarte()metodaSelektorklasę, aby utworzyć nowąSelektorprzykład.
Rejestrowanie kanałów za pomocą selektora
Kiedy już mamySelektor, musimy zarejestrować jeden lub więcejMożliwość wyboru kanałuz nim przedmioty. Kiedy zarejestrujemy kanał za pomocą aSelektor, określamy rodzaje wydarzeń, które nas interesują. Wyróżniamy cztery typy wydarzeń:Klucz wyboru.OP_READ,Klucz wyboru.OP_WRITE,Klucz wyboru.OP_CONNECT, IKlucz wyboru.OP_ACCEPT.
Oto przykład rejestracji aKanał SocketzSelektordla zdarzeń odczytu:
importuj java.nio.channels.SocketChannel; importuj java.nio.channels.Selector; importuj wyjątek java.io.IO; importuj adres java.net.InetSocket; public class ChannelRegistration { public static void main(String[] args) { try { Selektor selektor = Selector.open(); SocketChannel SocketChannel = SocketChannel.open(); gniazdoChannel.configureBlocking(false); SocketChannel.connect(nowy InetSocketAddress("example.com", 80)); gniazdoChannel.register(selektor, SelectionKey.OP_CONNECT); } catch (IOException e) { e.printStackTrace(); } } }
W tym kodzie najpierw tworzymy plikKanał Socketi skonfiguruj go tak, aby nie blokował. Następnie łączymy go ze zdalnym serwerem i rejestrujemy w plikuSelektordlaOP_CONNECTwydarzenie.


Uzyskanie gotowego zestawu
Gotowy zestaw ASelektorzawieraKlucz wyboruobiekty gotowe do operacji we/wy. Aby otrzymać gotowy zestaw należy najpierw wywołać metodęwybierać()metodaSelektor. Thewybierać()blokuje metodę do czasu, aż przynajmniej jeden z zarejestrowanych kanałów będzie gotowy do operacji we/wy.
Oto jak możemy otrzymać gotowy zestaw:
importuj java.nio.channels.Selector; importuj java.nio.channels.SocketChannel; importuj wyjątek java.io.IO; importuj adres java.net.InetSocket; importuj java.nio.channels.SelectionKey; importuj java.util.Iterator; klasa publiczna GetReadySet { public static void main(String[] args) { try { Selektor selektor = Selector.open(); SocketChannel SocketChannel = SocketChannel.open(); gniazdoChannel.configureBlocking(false); SocketChannel.connect(nowy InetSocketAddress("example.com", 80)); gniazdoChannel.register(selektor, SelectionKey.OP_CONNECT); while (true) { int gotoweKanały = selektor.select(); if (readyChannels == 0) kontynuuj; Iterator<SelectionKey> keyIterator = selektor.selectedKeys().iterator(); while (keyIterator.hasNext()) { Klucz wyboru = keyIterator.next(); if (key.isConnectable()) { // Obsługuj zdarzenie połączenia } else if (key.isReadable()) { // Obsługuj zdarzenie odczytu } else if (key.isWritable()) { // Obsługuj zdarzenie zapisu } keyIterator.remove(); } } } catch (IOException e) { e.printStackTrace(); } } }
W tym kodzie wywołujemy metodęwybierać()metoda w pętli. Jeśli chociaż jeden kanał jest gotowy, uzyskujemy iterator po wybranych kluczach za pomocąwybraneKlucze()metodaSelektor. Następnie iterujemy po kluczach i sprawdzamy typ zdarzenia dla każdego klawisza. Po przetworzeniu klucza usuwamy go z iteratora, aby uniknąć ponownego przetwarzania.
Rozważania praktyczne
Podczas pracy z gotowym zestawem aSelektor, należy wziąć pod uwagę kilka kwestii praktycznych.
Usunięcie klucza
Jak pokazano w poprzednim przykładzie, niezwykle ważne jest usunięcie plikuKlucz wyboruz iteratora po jego przetworzeniu. Jeśli go nie usuniemy, ten sam klucz zostanie przetworzony ponownie w kolejnej iteracji pętli, co doprowadzi do nieprawidłowego zachowania.
Obsługa błędów
Podczas obsługi zdarzeń we/wy musimy właściwie obsługiwać błędy. Na przykład, jeśli kanał napotka błąd podczas operacji odczytu lub zapisu, powinniśmy zamknąć kanał i go usunąćKlucz wyboruzSelektor.
Strojenie wydajności
Thewybierać()w niektórych przypadkach może stanowić wąskie gardło wydajności. Możemy skorzystać zwybierz teraz()metoda, która nie jest blokująca, lubwybierz (długi limit czasu)metoda, która blokuje na określony czas, w celu optymalizacji wydajności.
Nasza oferta jako dostawcy NIO
Jako dostawca NIO rozumiemy znaczenie wydajnej obsługi wejść/wyjść w nowoczesnych aplikacjach. Oferujemy szereg rozwiązań związanych z Java NIO, w tym zoptymalizowane biblioteki kodu, usługi doradcze i programy szkoleniowe. Niezależnie od tego, czy tworzysz wysokowydajny serwer sieciowy, czy aplikację intensywnie przetwarzającą dane, nasza wiedza pomoże Ci w pełni wykorzystać możliwości Java NIO.
Jeżeli są Państwo zainteresowani naszymi produktami i usługami, a w szczególności możliwością maksymalnego wykorzystania selektorów Java NIO, zapraszamyskontaktuj się z nami w celu omówienia zakupów. Zależy nam na dostarczeniu Państwu najlepszych rozwiązań dostosowanych do Państwa konkretnych potrzeb.
Wniosek
Uzyskanie gotowego zestawu z selektora Java NIO jest podstawową operacją w programowaniu Java NIO. Rozumiejąc, jak stworzyć plikSelektor, zarejestruj za jego pomocą kanały i uzyskaj gotowy zestaw, możesz budować wysokowydajne, nieblokujące się aplikacje I/O. Jako dostawca NIO jesteśmy tutaj, aby wspierać Cię w efektywnym korzystaniu z Java NIO. Jeśli chcesz dowiedzieć się więcej o samochodach elektrycznych i ich zaawansowanych technologiach, możesz sprawdzićSamochód elektryczny Nio ET5.
Referencje
- „Java NIO” Rona Hitchensa
- Dokumentacja Oracle Java dotycząca pakietu NIO



























































