Programowanie w języku Java, operacje we/wy do niedawna były wykonywane przy użyciu metafory strumieniowej. Wszystkie operacje wejścia/wyjścia są postrzegane jako ruch pojedynczych bajtów, po jednym na raz, przez obiekt o nazwie Strumień. Stream I/O służy do kontaktowania się ze światem zewnętrznym. Jest również używany wewnętrznie, do przekształcania obiektów w bajty, a następnie z powrotem w obiekty.
NIO ma tę samą rolę i cel, co oryginalne wejście/wyjście, ale używa innej metafory - bloku I/O. java.nio (nowe/nie blokujące operacje we/wy)) Interfejs API został wprowadzony w JDK1.4.
Czym różnią się wejścia/wyjścia strumienia od bloku I/O?
Strumieniowo-zorientowany system I/O przetwarza dane jeden bajt na raz. Strumień wejściowy generuje jeden bajt danych, a strumień wyjściowy pochłania jeden bajt danych. Bardzo łatwo jest tworzyć filtry dla przesyłanych strumieniowo danych. Jest także względnie proste połączenie kilku filtrów razem, tak aby każdy z nich wykonał swoją część, co stanowi pojedynczy, wyrafinowany mechanizm przetwarzania. Z drugiej strony, zorientowane strumieniowo wejścia/wyjścia często są dość powolne.
Blokowy system We/Wy zajmuje się danymi w blokach. Każda operacja produkuje lub zużywa blok danych w jednym kroku. Przetwarzanie danych przez blok może być znacznie szybsze niż przetwarzanie go przez (streamowany) bajt. Ale we/wy zorientowanym blokowo brakuje elegancji i prostoty zorientowanych strumieniowo operacji we/wy.
Kiedy powinieneś używać java.io i kiedy powinieneś preferować java.nio?
Skalowalność prawdopodobnie wpłynie na wybór pakietu. java.net będzie wymagać jednego wątku na gniazdo. Kodowanie będzie znacznie łatwiejsze. java.nio jest znacznie wydajniejszy, ale trudno go kodować.
Możesz uzyskać lepszą skalowalność, gdy masz do czynienia z dziesiątkami tysięcy połączeń, ale przy niższych numerach prawdopodobnie uzyskasz lepszą przepustowość dzięki blokowaniu IO.
Podczas pracy z SSL java.nio nie jest coś, łatwe do czynienia z
Ważne: Jeśli pracujesz z jednej z paczek, to nie jest dobry pomysł, aby stworzyć ramy od podstaw do czasu, gdy masz powód do zrobienia więc.
Dla java.nio projekty takie jak Grizzly i Quick Server zapewniają wielokrotne, nie blokujące się komponenty serwera.
Warto przeczytać Pain points with java.nio
końcu sprowadza się do specyficznych wymagań swoich projektów i co chce osiągnąć. Niektóre z najlepszych rozwiązań mogą nie wymagać najbardziej skomplikowanej infrastruktury. Aktualizacja: Ostatnio dowiedziałem się o pakiecie NIO.2, który istnieje od 1.7 jdk. NIO.2 różni się od NIO, a najważniejszym jest to, że NIO.2 oferuje asynchroniczną funkcjonalność kanału. NIO.2 primer
Jeśli pracujesz z NIO, warto przejść przez różnicę i który jest odpowiedni do twojego celu.
Nie jestem * odpowiadaczem *, więc dodam komentarz: [Strona Wikipedii na nim] (http://en.wikipedia.org/wiki/New_I/O) omawia niektóre z celów i przyczyn pakiet nio. –
Będąc pedantyczną, "Ścieżka" jest częścią biblioteki NIO2 dodanej w Javie 7. BTW: Podczas gdy wiele nie skupiam się na niezablokowanych gniazdach NIO, zwykle używam blokujących NIO gniazd, które są prostsze w użyciu IMHO. NIO2 Dodaj asynchroniczny NIO dla gniazd i plików. –