Перейти к содержимому
шпаргалка.
Esc
навигацияоткрыть⌘Jпредпросмотр
На этой странице

IO и NIO

Все темы Java Developer

В чём заключается разница между IO и NIO?

Основные различия между IO (Input/Output) и NIO (New Input/Output) в Java кратко можно сформулировать следующим образом:

  1. Модель:

    • IO: Основана на блокирующих операциях ввода-вывода. Каждый поток обрабатывает одно соединение или операцию ввода-вывода.

    • NIO использует каналы и буферы. SelectableChannel может работать в блокирующем или неблокирующем режиме; Selector сообщает готовность каналов. Асинхронные каналы относятся к отдельному API NIO.2. Неблокирующий и асинхронный ввод-вывод не тождественны.

  2. Каналы и селекторы:

    • IO: Работает с потоками ввода-вывода (InputStream, OutputStream), которые обычно блокируются в ожидании данных.

    • NIO: Использует каналы (Channel) для обмена данными и селекторы (Selector), позволяющие одному потоку обрабатывать несколько каналов, опрашивая их на доступные данные или готовность к записи.

  3. Буферы:

    • IO: Ввод и вывод осуществляются напрямую через потоки данных.

    • NIO: Использует буферы (Buffer), которые служат промежуточным хранилищем данных перед их фактической записью или чтением.

  4. Эффективность:

    • IO: Может быть менее эффективным при большом количестве одновременных соединений из-за блокировок и потребления ресурсов потоков.

    • NIO: Предлагает более высокую эффективность и масштабируемость благодаря возможности асинхронной обработки и меньшему числу потоков.

  5. Поддержка:

    • IO: Поддерживается в Java с момента ее появления и используется в старых API, таких как java.io.

    • NIO: Введена в Java 1.4 и представляет собой новый API в java.nio, предназначенный для более эффективной работы с сетевыми приложениями.


Какие особенности NIO вы знаете?

Основные особенности NIO в Java:

  1. Неблокирующий ввод-вывод: Позволяет выполнять операции ввода-вывода без блокировки потоков.

  2. Каналы и буферы: Использует каналы (Channel ) для передачи данных и буферы (Buffer) для их временного хранения.

  3. Селекторы: Позволяет одному потоку управлять несколькими каналами, улучшая масштабируемость.

  4. Мемори-маппинг: Поддержка памяти, отображенной в файл ( MappedByteBuffer), для более быстрой работы с файлами.

  5. Асинхронные операции: Поддержка асинхронного ввода-вывода для улучшения производительности.

  6. Наборы ключей: Использование SelectionKey для управления состоянием каналов.

Эта страница была полезной?