Описание тега nio
NIO - это "новый ввод-вывод" Java, представленный в версии 1.4, обеспечивающий неблокирующий и мультиплексированный сетевой ввод-вывод; "прямые" (собственные) буферы; файловые блокировки и сопоставленные файлы; кодеки набора символов.
NIO означает "Новый ввод-вывод". Он был представлен в JDK 1.4 в пакете java.nio. Он состоит из нескольких элементов:
- Семейство буферов, которые инкапсулируют текущую позицию и предел и могут содержать примитивные типы и их массивы, и чьи данные могут храниться либо на уровне Java, либо на собственном уровне, последний - через "прямые" буферы. Копирование ввода-вывода между каналами с использованием прямых буферов вообще не должно пересекать уровень JNI в Java, что дает значительные преимущества в скорости.
- Семейство каналов, которые могут выполнять блокирующий или неблокирующий ввод-вывод или неблокирующий мультиплексированный ввод-вывод через Java-эквивалент Unix.
select()
функция, которая устраняет необходимость вjava.net
для создания потока на каждое соединение, что улучшает масштабируемость. Также естьFileChannel
с блокирующими примитивами и возможностью предоставлять файлы с отображением в память. АPipe
также предоставляется класс с парой выбираемых каналов. - Семейство кодеков набора символов.
- Начиная с Java 1.7, NIO был расширен для поддержки неблокирующего ввода-вывода для чтения и записи файловой системы, а также поддержки NIO для многоадресной рассылки.
Библиотеки Java NIO
Пакет NIO представляет собой API довольно низкого уровня, но появилось несколько сторонних библиотек, которые упрощают разработку программного обеспечения, использующего NIO:
- Netty: Netty - это среда асинхронных сетевых приложений, управляемая событиями, для быстрой разработки обслуживаемых высокопроизводительных протокольных серверов и клиентов.
- Apache MINA: Apache MINA - это структура сетевых приложений, которая помогает пользователям легко разрабатывать высокопроизводительные и масштабируемые сетевые приложения. Он предоставляет абстрактный, управляемый событиями, асинхронный API через различные виды транспорта, такие как TCP/IP и UDP/IP через Java NIO.
- Grizzly: Grizzly NIO и веб-среда была разработана, чтобы помочь разработчикам использовать преимущества Java™ NIO API. Цель Grizzly - помочь разработчикам создавать масштабируемые и надежные серверы с использованием NIO, и мы также предлагаем расширенные компоненты инфраструктуры: Web Framework (HTTP/S), протокол Bayeux, сервлет, HttpService OSGi и Comet.
- Vert.x: легкая разработка асинхронных приложений для современного Интернета и предприятий, поддержка компонентов на JavaScript, Ruby, Groovy или Java, а также возможность смешивать и сочетать несколько языков программирования в одном приложении.
- xsocket: xSocket - это простая в использовании сетевая библиотека на основе NIO для создания высокопроизводительных и масштабируемых сетевых приложений. (Разработка прекращена)
- NIO Framework: NIO Framework - это библиотека поверх NIO, которая скрывает большую часть сложности простого NIO. С помощью NIO Framework вы можете реализовать высокопроизводительные сетевые приложения Java без необходимости иметь дело со всеми неприятными деталями NIO.