Все знания о Java IO и NIO здесь

интервью Java задняя часть WeChat

Java Interview Clearance Manual (Руководство по изучению Java) Адрес Github (он все еще совершенствуется, каждый может улучшить его вместе):GitHub.com/snail Climb/…

Сводка обучения потоку ввода-вывода

1 Java IO, твердые кости могут стать мягкими

основное содержание:

(1) Классификация структурной схемы по режиму работы:

按操作方式分类结构图:

(2) Схема структуры классификации по объекту операции

按操作对象分类结构图

2. Краткий обзор системы ввода-вывода Java

  1. Классификация потоков ввода-вывода:

    • По направлению потока поток можно разделить на входной поток и выходной поток;
    • В соответствии с операционным блоком его можно разделить на поток байтов и поток символов;
    • В соответствии с ролью потока он делится на поток узла и поток обработки.
  2. Анализ принципа потока:

    Поток Java Io включает более 40 классов. Эти классы выглядят беспорядочно, но на самом деле они очень регулярны, и между ними существует очень тесная связь. Более 40 классов потока Java Io являются производными от следующих 4 абстрактных классов, производных от базовый класс.

    • InputStream/Reader: базовый класс для всех входных потоков, первый из которых представляет собой поток ввода байтов, а второй — поток ввода символов.
    • OutputStream/Writer: базовый класс для всех потоков вывода, первый из которых является потоком вывода байтов, а второй — потоком вывода символов.
  3. Обычное использование потока ввода-вывода

Три вопроса интервью по  Java IO

Резюме обучения NIO

1. Обзор Java NIO

основное содержание:

  1. Введение в НИО:

    Java NIO — это java 1.4, и N в новом наборе интерфейсов ввода-вывода NIO можно понимать как неблокирующий, а не просто новый.

  2. Особенности NIO/Разница между NIO и IO:

    • 1) IO ориентирован на поток, а NIO — на буфер;
    • 2) поток IO заблокирован, поток NIO не заблокирован;
    • 3) У NIO есть селекторы, а у IO нет.
  3. Методы чтения данных и записи данных:

    • Данные, считанные из канала: создайте буфер, затем запросите канал для чтения данных.

    • Запись данных из канала: создайте буфер, заполните его данными и попросите канал записать данные.

  4. Краткое введение в основные компоненты NIO

    • Channels
    • Buffers
    • Selectors

2. Буфер (буфер) Java NIO

основное содержание:

  1. Буферное (буферное) введение:

    • Буферы Java NIO используются для взаимодействия с каналами NIO. Мы читаем данные из канала в буферы и записываем данные из буфера в каналы;
    • Буфер — это, по сути, область памяти;
    • Буфер имеет три свойства, которыми необходимо управлять, а именно: емкость, положение и предел.
  2. Общие методы буфера

    • Buffer clear()
    • Buffer flip()
    • Buffer rewind()
    • Buffer position(int newPosition)
  3. Введение в использование/метод буфера:

    • Выделение буфера:
    ByteBuffer buf = ByteBuffer.allocate(28);//以ByteBuffer为例子
    
    • Запись данных в буфер

    Существует два способа записи данных в буфер:

    1. Запись данных из канала в буфер

    int bytesRead = inChannel.read(buf); //read into buffer.
    

    2. Записать данные через put:

    buf.put(127);
    
  4. Проверка общего метода буфера

    Честно говоря, программирование NIO действительно сложно, и в следующем тестовом примере вы можете с трудом понять функцию метода Buffer, упомянутого выше.

Три канала Java NIO

основное содержание:

  1. Введение в канал
    • Вообще говоря, все IO в NIO начинаются с Channel (канала).
    • Разница между каналом NIO Channel и потоком:
  2. Использование FileChannel
  3. Использование SocketChannel и ServerSocketChannel
  4. ️Использование DatagramChannel
  5. Scatter / Gather
    • Разброс: информация, считанная из канала, разбрасывается по N буферам (буферам).
    • Собрать: отправить содержимое N буферов в канал по порядку.
  6. передача данных между каналами
    • В Java NIO, если канал имеет тип FileChannel, он может напрямую передавать данные в другой канал.
    • TransferFrom() : метод TransferFrom передает данные из источника канала в FileChannel.
    • TransferTo() : метод TransferTo передает данные FileChannel в другой канал.

Четыре   Селектор Java NIO (селектор)

основное содержание:

  1. Введение в селектор

    • Селектор вообще называется селектором, конечно можно перевести и как мультиплексор. Это один из основных компонентов Java NIO, который используется для проверки того, доступно ли состояние одного или нескольких каналов NIO для чтения и записи. Таким образом, один поток может управлять несколькими каналами, то есть можно управлять несколькими сетевыми ссылками.
    • Преимущество использования Selector заключается в том, что он использует меньше потоков для обработки канала и позволяет избежать накладных расходов на переключение контекста потока по сравнению с использованием нескольких потоков.
  2. Как использовать селектор

    • Создание селектора
    Selector selector = Selector.open();
    
    • Зарегистрируйте канал в селекторе (канал должен быть неблокирующим)
    channel.configureBlocking(false);
    SelectionKey key = channel.register(selector, Selectionkey.OP_READ);
    
    • Введение в SelectionKey

      Ключ SelectionKey представляет отношение регистрации между конкретным объектом канала и конкретным объектом селектора.

    • Выбор каналов с помощью селектора (Выбор каналов с помощью селектора)

      Селектор поддерживает набор зарегистрированных каналов, и это отношение регистрации инкапсулировано в SelectionKey.

    • Как перестать выбирать

      метод wakeup() и метод close().

  3. код шаблона

    С кодом шаблона, когда мы пишем программы, большую часть времени мы добавляем соответствующий бизнес-код в код шаблона.

  4. Простой пример взаимодействия между клиентом и сервером

Пять  Java NIO включает пути и файлы

основное содержание

Краеугольный камень файлового ввода-вывода: Путь:

  • Создать путь
  • Преобразование между файлом и путем, преобразование между файлом и URI
  • Получить информацию о пути
  • Удалите лишние элементы в пути

Два охватывают класс Files:

  • Files.exists() проверяет, существует ли путь к файлу
  • Files.createFile() создает файл
  • Files.createDirectories() и Files.createDirectory() создают папки
  • Метод Files.delete() может удалить файл или каталог
  • Метод Files.copy() может копировать файл из одного места в другое.
  • Получить атрибуты файла
  • Пройтись по папке
  • Files.walkFileTree() проходит по всему каталогу

Резюме обучения Six  NIO и введение новых функций NIO

  • Карта памяти:

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

Семь  Java NIO AsynchronousFileChannel асинхронная передача файлов

AsynchronousFileChannel был добавлен как часть nio в Java7. AsynchronousFileChannel позволяет асинхронно читать и записывать данные.

Восемь Java с высокой степенью параллелизма (8): NIO и AIO

Рекомендуемое чтение

Испытайте радость асинхронного выполнения NIO.2 в Java 7

Резюме и примеры Java AIO

AIO — это аббревиатура от асинхронного ввода-вывода.Хотя NIO обеспечивает неблокирующий метод сетевых операций, поведение ввода-вывода NIO по-прежнему является синхронным. Для NIO наш бизнес-поток уведомляется, когда операция ввода-вывода готова, а затем поток выполняет операцию ввода-вывода самостоятельно, а сама операция ввода-вывода синхронизируется.

Если вы хотите создать личный блог (обычно с помощью стороннего WordPress или вы также можете использовать систему блогов с открытым исходным кодом, такую ​​​​как Tale, что очень удобно) или использовать сторонние сервисы, такие как база данных Redis, балансировка нагрузки и т. д. , мы рекомендуем вам использовать Alibaba Cloud. С объективной точки зрения сервис и качество Alibaba Cloud являются лучшими, а студенческая скидка особенно велика, что составляет более 100 юаней в год. Вот мой адрес купона (сам я использую облегченный сервер):Адрес купона

Добро пожаловать в мою общедоступную учетную запись WeChat: «Руководство по прохождению интервью по Java» (теплая общедоступная учетная запись WeChat, которая с нетерпением ждет вместе с вами прогресса ~~~ настаивайте на оригинальности, делитесь красивыми текстами и делитесь различными учебными ресурсами по Java):