Точная цитата из книги выглядит так:
«Новая» библиотека ввода-вывода 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
.