NIO - это "новый ввод-вывод" Java, представленный в версии 1.4, обеспечивающий неблокирующий и мультиплексированный сетевой ввод-вывод; "прямые" (собственные) буферы; файловые блокировки и сопоставленные файлы; кодеки набора символов.

NIO означает "Новый ввод-вывод". Он был представлен в JDK 1.4 в пакете java.nio. Он состоит из нескольких элементов:

  1. Семейство буферов, которые инкапсулируют текущую позицию и предел и могут содержать примитивные типы и их массивы, и чьи данные могут храниться либо на уровне Java, либо на собственном уровне, последний - через "прямые" буферы. Копирование ввода-вывода между каналами с использованием прямых буферов вообще не должно пересекать уровень JNI в Java, что дает значительные преимущества в скорости.
  2. Семейство каналов, которые могут выполнять блокирующий или неблокирующий ввод-вывод или неблокирующий мультиплексированный ввод-вывод через Java-эквивалент Unix. select() функция, которая устраняет необходимость в java.netдля создания потока на каждое соединение, что улучшает масштабируемость. Также естьFileChannelс блокирующими примитивами и возможностью предоставлять файлы с отображением в память. АPipe также предоставляется класс с парой выбираемых каналов.
  3. Семейство кодеков набора символов.
  4. Начиная с 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.