JDK 1.4 повторно реализует ввод-вывод с NIO, ускоряя ввод-вывод, это правда? - PullRequest
0 голосов
/ 20 ноября 2018

Я читаю книгу Мышление на Java , в котором упоминается JDK 1.4 java.nio * о файле и говорится, что File NIO работает быстрее File IO и старого пакета IOбыл переопределен с помощью NIO, поэтому теперь IO стал быстрее.

Это правда?На что конкретно ссылаются здесь NIO и IO?Я думаю, это должно быть связано с работой JVM и операционной системы, потому что я не нашел информации NIO в пакете IO исходного кода JDK.Можете ли вы объяснить, на что здесь ссылается NIO?Почему это быстрее, чем IO?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Точная цитата из книги выглядит так:

«Новая» библиотека ввода-вывода Java, представленная в JDK 1.4 в пакетах java.nio.*, имеет одну цель: скорость.Фактически, «старые» пакеты ввода / вывода были переопределены с использованием nio , чтобы воспользоваться преимуществами этого увеличения скорости, поэтому вы выиграете, даже если вы не будете явно писать код с nio.

( Мышление в Java , 4 th редакция, стр. 679)

Это немного яснее, чемваш перефразироватьКроме того, в начале главы, в которой это появляется («I / O»), явно определены термины «I / O» и «nio».

Что именно здесь обозначают NIO и IO?

«I / O» - это обычный компьютерный жаргон для «ввода / вывода», и Эклс использует его в этом смысле.«nio» относится конкретно к java.nio.* классам стандартной библиотеки Java, которые были новыми для Java 1.4.Как и многие другие, Эклс связывает «n» с «новым», хотя Oracle (тогда Sun), похоже, имел в виду более технический термин «неблокирующая».Когда Эклз говорит о «старых» пакетах ввода / вывода, он имеет в виду, прежде всего, классы java.io.* (фактически только один пакет), о которых он только что потратил 30 страниц.

Почемуэто быстрее, чем IO?

Согласно Эклсу:

Скорость достигается за счет использования структур, которые ближе к способу ввода / вывода операционной системы: каналы и буферы .

Если это не имеет смысла для вас, то вам, вероятно, нужно изучить детали низкого уровня, на которые он ссылается.Однако их можно понять из подробностей о nio классах, которым Эклс посвящает следующие 18 страниц книги.

Это правда [чтоjava.io.* классы извлекли пользу из nio ]?

Утверждение кажется мне вполне правдоподобным.У меня нет легкого доступа к источникам Java 1.4, но мне понадобилось около минуты, чтобы найти источник java.io.FileInputStream в Google и обнаружить, что в первой версии, которую я посмотрел (из OpenJDK 7),хотя биты ключа являются родными, класс действительно реализован в терминах nio class java.nio.channels.FileChannel.

0 голосов
/ 20 ноября 2018

Java IO относится к API ввода / вывода Java.Это дизайн ... работать с вводом и выводом.

Java NIO - это переопределение ввода-вывода, неблокирующего ввода-вывода.Он считается более быстрым.

Я не знаю, был ли IO повторно реализован в какой-то момент (хотя это то, о чем вы спрашиваете), я могу только предположить, что вы неправильно его прочитали, и это на самом деле NIO - это повторное внедрение IO.Фрагмент из книги может прояснить это лучше.

ps: Это переопределение, как и в новом взгляде на библиотеку, реализованное по-другому, но обычно делающее то же самое

...