Я не совсем понимаю, насколько они отличаются друг от друга, поэтому у меня есть вопросы по этим двум пакетам.
Посмотрев немного в Google, кажется, что Oracle решила обновить NIO
пакет более новым и улучшенным NIO.2
пакетом как часть выпуска JDK7.
- Как производительность
NIO
пакета сравнивается сNIO.2
пакетом? - Какие большие изменения произошли с
NIO
поNIO.2
? (например, новые методы, функции) - Почему
NIO
нужно было обновить исходный пакет? - В наши дни это
NIO.2
просто синонимNIO
пакета?
Дело не в том, что я хочу использовать устаревший пакет в своем коде, мне просто это очень интересно. Подскажите пожалуйста их отличия?
java
io
nio
difference
Джон Хьюнь
источник
источник
Ответы:
Первоначально Java начала предлагать
File
класс вjava.io
пакете для доступа к файловым системам. Этот объект представляет файл / каталог и позволяет выполнять некоторые операции, такие как проверка существования файла / каталога, получение свойств и его удаление. Однако у него были некоторые недостатки. Назвать несколько:boolean
. Как можно догадаться, в случае ошибкиfalse
возвращалось, а не генерировалось исключение. Разработчик действительно не мог понять, почему это не удалось.Для решения этих проблем в java 4 был представлен пакет java.nio. Ключевыми функциями были:
В java 7 представлен пакет java.nio.file, обеспечивающий лучшую поддержку для обработки символических ссылок, доступа к атрибутам файлов и, в частности, для поддержки расширенной файловой системы с помощью таких классов, как Path, Paths и Files. Возможно, вы захотите взглянуть на описание пакета java.nio.file, чтобы получить более подробную информацию об этом.
Имея это в виду:
Они служат разным целям. Чтобы отметить большие изменения, вы можете взглянуть на весь новый пакет
java.nio.file
.Это не так. Новый пакет был представлен, а не обновлен.
Нет, они не синонимы. Также не имеет смысла сравнивать производительность между ними, поскольку они служат разным целям. NIO - более абстрактный низкоуровневый ввод-вывод данных, а NIO2 - управление файлами.
Надеюсь это поможет.
[Библиография: Oracle Certified Professional Java SE7 - Подробное руководство по сертификации OCJP7, SGGanesh and Tushar Sharma - Chapter 9]
источник
NIO.2 представил асинхронный ввод-вывод .
Асинхронный ввод-вывод - это подход к неблокирующему вводу-выводу, который не поддерживается NIO.
NIO: селекторы / схема реактора
NIO.2: обработчики завершения / шаблон проактора
Таким образом, в Windows NIO.2 использует порты завершения ввода-вывода , что должно повысить производительность. За исключением того, что никто не знает, потому что никто не использует Windows на стороне сервера, и если они это сделают, они, вероятно, так и сделают, потому что они сильно инвестированы в .net, и по этой причине, скорее всего, не будут рассматривать использование Java.
источник
Мое мнение:
Укороченная версия
Это добавление пакета java.nio.file с его высокоуровневыми значительно улучшенными функциями файлов и файловой системы.
С точки зрения сетевых сокетов или низкоуровневого доступа к файлам, NIO == NIO.2 с некоторыми улучшениями удобства.
Более длинная версия
Java IO
Пакет:
java.io
Старый API блокировки ввода-вывода
Java NIO
Добавлен в Java 1.4 новый неблокирующий API.
Пакет:
java.nio
Java неблокирующий ввод-вывод. Классы нравится
Selector
,SelectorKey
,Channel
.Это , мне кажется, НИО был большой шаг для сети I / O (
Selector
,SelectorKey
,SocketChannel
,ServerSocketChannel
,Buffer
), намного меньше для файла I / O (FileChannel
иBuffer
только, в том числе файлы , отображенные на память). Это API довольно низкого уровня, как для сетевой, так и для файловой частей.Java NIO.2
Добавлено в Java 7. В основном это касается добавления значительно улучшенного API для работы с файлами и файловыми системами и адресации. Новый API, связанный с файлами и файловой системой, имеет относительно высокий уровень.
Пакет:
java.nio.file
и несколько дополнений к родительскомуjava.nio
.Эти дополнения предназначены для файлового ввода-вывода и лишь несколько незначительных дополнений к сетевому вводу-выводу или низкоуровневому файловому API.
Наиболее заметными являются низкоуровневые, необязательные, связанные с файлами, добавления API
AsynchronousSocketChannel
,AsynchronousServerSocketChannel
иAsynchronousFileChannel
, которые добавляют варианты обратных вызовов к некоторым методам. Асинхронные версии в основном предназначены для удобства; такие интерфейсы сопоставления можно было бы собрать вместе и раньше, но теперь они доступны прямо из коробки в JRE.Новый файловый API приносит много плюсов - гораздо более полезная адресация файловой системы с помощью пути, значительно улучшенное управление файлами ZIP с использованием настраиваемого поставщика файловой системы, доступ к специальным атрибутам файла, множество удобных методов, таких как чтение всего файла одной командой, копирование файла с помощью одна команда и т. д. Но все это связано с файлами / файловыми системами и все довольно высокого уровня.
Повторяя то, что я уже сказал выше, с точки зрения сетевых сокетов или доступа к файлам низкого уровня, NIO == NIO.2
Соответствующие ссылки
источник