Nie bardzo rozumiem, jak bardzo się od siebie różnią, więc mam kilka pytań dotyczących tych dwóch pakietów.
Po rozejrzeniu się trochę w Google, wygląda na to, że Oracle zdecydowało się zaktualizować NIO
pakiet o nowszy i ulepszony NIO.2
pakiet w ramach wydania JDK7.
- Jak wypada wydajność
NIO
pakietu w porównaniu zNIO.2
pakietem? - Jakie są duże zmiany od
NIO
doNIO.2
? (np. nowe metody, funkcje) - Dlaczego oryginalny
NIO
pakiet musiał zostać zaktualizowany? - Czy obecnie
NIO.2
jest synonimem tegoNIO
pakietu?
Nie chodzi o to, że chcę używać starszego pakietu w moim kodzie, jestem po prostu bardzo ciekawy tego. Proszę powiedz mi, jakie są różnice?
java
io
nio
difference
John Huynh
źródło
źródło
Odpowiedzi:
Java początkowo oferowała
File
klasę wjava.io
pakiecie, aby uzyskać dostęp do systemów plików. Ten obiekt reprezentuje plik / katalog i umożliwił wykonanie pewnych operacji, takich jak sprawdzenie, czy plik / katalog istnieje, pobranie właściwości i usunięcie go. Miał jednak pewne wady. By wymienić tylko kilka:boolean
. Jak można sobie wyobrazić, w przypadku błędufalse
zwracano, zamiast rzucać wyjątek. Deweloper rzeczywiście nie mógł wiedzieć, dlaczego się nie udało.Aby przezwyciężyć te problemy, pakiet java.nio został wprowadzony w java 4. Kluczowe cechy to:
Wraz z java 7 wprowadzono pakiet java.nio.file zapewniający lepszą obsługę dowiązań symbolicznych, dostęp do atrybutów plików, a zwłaszcza obsługę rozszerzonego systemu plików za pomocą klas takich jak ścieżka, ścieżki i pliki. Możesz rzucić okiem na opis pakietu java.nio.file, aby uzyskać więcej szczegółów na ten temat.
Mając to na uwadze:
Służą różnym celom. Aby wskazać duże zmiany, możesz spojrzeć na cały nowy pakiet
java.nio.file
.Tak się nie stało. Nowy pakiet został wprowadzony, a nie zaktualizowany.
Nie, nie są synonimami. Porównywanie ich wydajności również nie ma większego sensu, ponieważ służą one różnym celom. NIO to bardziej abstrakcyjne wejścia / wyjścia niskiego poziomu i NIO2 skupione na zarządzaniu plikami.
Mam nadzieję że to pomoże.
[Bibliografia: Oracle Certified Professional Java SE7 - obszerny przewodnik certyfikacji OCJP7 autorstwa SGGanesh i Tushar Sharma - rozdział 9]
źródło
W NIO.2 wprowadzono asynchroniczne we / wy .
Asynchroniczne operacje we / wy to podejście do nieblokujących operacji we / wy, które nie jest obsługiwane przez NIO.
NIO: selektory / wzór reaktora
NIO.2: obsługa zakończenia / wzorzec proaktora
Dlatego w systemie Windows NIO.2 używa portów zakończenia we / wy , co powinno zwiększyć wydajność. Tyle tylko, że nikt nie wie, ponieważ nikt nie używa systemu Windows po stronie serwera, a jeśli tak, to prawdopodobnie robią to, ponieważ są mocno zainwestowani w .net iz tego powodu najprawdopodobniej nie będą rozważać używania Javy.
źródło
Moje podanie:
Krótka wersja
Jest to dodanie pakietu java.nio.file ze znacznie ulepszoną funkcjonalnością plików i systemów plików na wysokim poziomie.
Z punktu widzenia gniazd sieciowych lub niskiego poziomu dostępu do plików, NIO == NIO.2 z kilkoma udogodnieniami.
Dłuższa wersja
Java IO
Pakiet:
java.io
stary blokujący interfejs I / O API
Java NIO
Dodano w Javie 1.4, nowym nieblokującym API.
Pakiet:
java.nio
nieblokujące IO Java. Klasy podoba
Selector
,SelectorKey
,Channel
.Wydaje mi Nio to duży krok w górę do sieci I / O (
Selector
,SelectorKey
,SocketChannel
,ServerSocketChannel
,Buffer
), a tym bardziej dla pliku I / O (FileChannel
iBuffer
tylko w tym pamięci mapowane plików). Jest to interfejs API dość niskiego poziomu, zarówno dla części sieciowych, jak i plików.Java NIO.2
Dodano w Javie 7. Chodzi głównie o dodanie znacznie ulepszonego interfejsu API do obsługi plików i systemów plików oraz adresowania. Nowy interfejs API związany z plikami i systemem plików jest stosunkowo wysoki.
Pakiet:
java.nio.file
i kilka dodatków do rodzicajava.nio
.Te dodatki są dla we / wy pliku i tylko kilka pomniejszych dodatków do sieciowego we / wy lub niskiego poziomu API plików.
Najbardziej zauważalną niskim poziomie, nie jest konieczne plik związane, dodatki API są
AsynchronousSocketChannel
,AsynchronousServerSocketChannel
iAsynchronousFileChannel
, co dodaje callbacków warianty niektórych metod. Wersje asynchroniczne programu to przede wszystkim udogodnienie; takie interfejsy mapowania mogły zostać zhakowane razem nawet wcześniej, ale teraz są one dostępne po wyjęciu z pudełka w środowisku JRE.Nowe API plików zapewnia wiele korzyści - znacznie bardziej przydatne adresowanie systemu plików za pomocą Path, znacznie ulepszone manipulowanie plikami ZIP przy użyciu niestandardowego dostawcy systemu plików, dostęp do specjalnych atrybutów plików, wiele wygodnych metod, takich jak odczyt całego pliku za pomocą jednego polecenia, kopiowanie pliku za pomocą jedno polecenie itd. Ale to wszystko jest związane z plikami / systemem plików i wszystko na dość wysokim poziomie.
Powtarzając to, co powiedziałem powyżej, z perspektywy gniazd sieciowych czy niskiego poziomu dostępu do plików, NIO == NIO.2
Odpowiednie linki
źródło