Этому вопросу посвящена отдельная
страница документации. Если вы никогда раньше не сталкивались с Java NIO – это хорошее место для начала знакомства. Отвечая на этот вопрос, нужно перечислить и объяснить основные понятия NIO:
Буфферы. Временные хранилища фиксированного размера для транспортируемых данных. Именно буферизация – основное
отличие неблокирующего чтения от
java.io.
Каналы. Реализации интерфейса
Channel – сущности, представляющие соединения между разными участниками ввода-вывода (файлы, сокеты, консоль).
Селекторы. Наследники класса
Selector. «Мультиплексоры» каналов – комбинируют несколько каналов в один. Регистрация канала в селекторе возвращает
SelectionKey, который содержит ссылку на сам канал, и ряд его атрибутов. Селектор позволяет выбрать из набора зарегистрированных каналов подмножество готовых к работе, при необходимости блокируя выполнение на время ожидания. Каналы и селекторы располагаются в пакете
java.nio.channels. Полный пример использования селекторов можно найти в
статье на baeldung.
Кодировки. Charset – то, как бинарные данные будут конвертироваться в родные для Java символы UTF-16 и обратно. Классы для работы с кодировками хранятся в пакете
java.nio.charset.