Каково точное использование пакета java nio, когда уже доступны методы с пакетом io - программирование
Подтвердить что ты не робот

Каково точное использование пакета java nio, когда уже доступны методы с пакетом io

Я изучал пакет java nio, и я понял, что существует множество методов, уже предоставленных файлом, который nio.Files предоставляет снова, используя класс Path. Как и еще, я получил. Я фактически не понимаю, что такое фактическое использование пакета nio.

Я просто очень новичок в этом пакете, поэтому мой вопрос может быть неправильным, но небольшая помощь может помочь мне читать дальше.

4b9b3361

Ответ 1

Основное различие между IO и NIO заключается в том, что IO блокируется, а NIO не блокируется.

В этой статье объясняются различия в пакетах и ​​то, что блокирует и не блокирует IO.

Ответ 2

Java-программирование, I/O до недавнего времени выполнялось с использованием метафоры потоков. Все операции ввода-вывода рассматриваются как движение одиночных байтов по одному за счет объекта, называемого Stream. Поток ввода-вывода используется для связи с внешним миром. Он также используется внутри, для превращения объектов в байты, а затем обратно в объекты.

NIO имеет ту же роль и назначение, что и исходный ввод-вывод, но использует другой метафоры - блок ввода-вывода. java.nio(новый/неблокирующий ввод-вывод)) API был введен с JDK1.4.

В чем разница между потоковыми вводами и вводами ввода-вывода?

Система ввода-вывода, ориентированная на поток, обрабатывает данные по одному байту за раз. Входной поток создает один байт данных, а выходной поток потребляет один байт данных. Очень легко создавать фильтры для потоковых данных. Также относительно просто объединить несколько фильтров вместе, чтобы каждый из них выполнял свою роль в том, что составляет один сложный механизм обработки. С другой стороны, поточно-ориентированный ввод-вывод часто довольно медленный.

Блок-ориентированная система ввода-вывода имеет дело с данными в блоках. Каждая операция производит или потребляет блок данных за один шаг. Обработка данных блоком может быть намного быстрее, чем обработка его байтом (потоковым). Но блок-ориентированный ввод-вывод не обладает некоторой изящностью и простотой потокового ввода-вывода.

Когда вы должны использовать java.io и когда вы предпочитаете java.nio?

  • Масштабируемость, вероятно, приведет к выбору вашего пакета. Для java.net потребуется один поток для каждого сокета. Кодирование будет значительно проще. java.nio намного эффективнее, но его сложно кодировать.

  • Вы можете получить лучшую масштабируемость, когда имеете дело с десятками тысяч подключений, но при более низких значениях вы, вероятно, получите лучшую пропускную способность с блокировкой IO.

  • При работе с SSL java.nio нелегко справиться с

Важно: если вы работаете с одним из пакетов, не рекомендуется создавать структуру с нуля до тех пор, пока вы не найдете веских оснований для этого.

Для java.nio такие проекты, как Grizzly и Quick Server, предоставляют многократно используемые блокирующие серверные компоненты.

Стоит прочитать Болевые точки с java.nio

Наконец, это сводится к конкретным требованиям ваших проектов и тем, что вы пытаетесь достичь. Некоторые из лучших решений могут не требовать самой сложной инфраструктуры при al

Обновление: недавно узнал о пакете NIO.2, который существует с jdk 1.7. NIO.2 отличается от NIO, главным из которых является то, что NIO.2 предлагает асинхронные функции канала. NIO.2 праймер

Если вы работаете с NIO, стоит пережить разницу и какой из них подходит вашей цели.

Ответ 3

Java NIO: каналы и буферы
В стандартном IO API вы работаете с потоками байтов и потоками символов. В NIO вы работаете с каналами и буферами. Данные всегда считываются из канала в буфер или записываются из буфера в канал.

Java NIO: неблокирующий IO
Java NIO позволяет вам делать неблокирующие IO. Например, поток может запросить канал для чтения данных в буфер. Пока канал считывает данные в буфер, поток может сделать что-то еще. После считывания данных в буфер поток может продолжить его обработку. То же самое верно для записи данных в каналы.

Java NIO: Селекторы
Java NIO содержит концепцию "селекторов". Селектор - это объект, который может контролировать несколько каналов для событий (например: открытие соединения, данные и т.д.). Таким образом, один поток может контролировать несколько каналов для данных.
Подробнее о orcale

Ответ 4

Почти каждый метод в java.io.File имеет проблемы, которые нельзя устранить по причинам совместимости, наиболее очевидным является то, что методы возвращают логическое значение, когда они терпят неудачу. Эти проблемы плюс желание поддерживать подключаемые файловые системы и многое другое потребовали разработки совершенно нового API файловой системы, поэтому именно поэтому был создан java.nio.file.

Ответ 5

В NIO также были введены каналы, абстрагирующие специализацию в Stream - File, Socket, Network.