Java Interview Clearance Manual (Руководство по изучению Java) Адрес Github (он все еще совершенствуется, каждый может улучшить его вместе):GitHub.com/snail Climb/…
Сводка обучения потоку ввода-вывода
1 Java IO, твердые кости могут стать мягкими
основное содержание:
(1) Классификация структурной схемы по режиму работы:
(2) Схема структуры классификации по объекту операции
2. Краткий обзор системы ввода-вывода Java
-
Классификация потоков ввода-вывода:
- По направлению потока поток можно разделить на входной поток и выходной поток;
- В соответствии с операционным блоком его можно разделить на поток байтов и поток символов;
- В соответствии с ролью потока он делится на поток узла и поток обработки.
-
Анализ принципа потока:
Поток Java Io включает более 40 классов. Эти классы выглядят беспорядочно, но на самом деле они очень регулярны, и между ними существует очень тесная связь. Более 40 классов потока Java Io являются производными от следующих 4 абстрактных классов, производных от базовый класс.
- InputStream/Reader: базовый класс для всех входных потоков, первый из которых представляет собой поток ввода байтов, а второй — поток ввода символов.
- OutputStream/Writer: базовый класс для всех потоков вывода, первый из которых является потоком вывода байтов, а второй — потоком вывода символов.
-
Обычное использование потока ввода-вывода
Три вопроса интервью по Java IO
Резюме обучения NIO
1. Обзор Java NIO
основное содержание:
-
Введение в НИО:
Java NIO — это java 1.4, и N в новом наборе интерфейсов ввода-вывода NIO можно понимать как неблокирующий, а не просто новый.
-
Особенности NIO/Разница между NIO и IO:
- 1) IO ориентирован на поток, а NIO — на буфер;
- 2) поток IO заблокирован, поток NIO не заблокирован;
- 3) У NIO есть селекторы, а у IO нет.
-
Методы чтения данных и записи данных:
-
Данные, считанные из канала: создайте буфер, затем запросите канал для чтения данных.
-
Запись данных из канала: создайте буфер, заполните его данными и попросите канал записать данные.
-
-
Краткое введение в основные компоненты NIO
- Channels
- Buffers
- Selectors
2. Буфер (буфер) Java NIO
основное содержание:
-
Буферное (буферное) введение:
- Буферы Java NIO используются для взаимодействия с каналами NIO. Мы читаем данные из канала в буферы и записываем данные из буфера в каналы;
- Буфер — это, по сути, область памяти;
- Буфер имеет три свойства, которыми необходимо управлять, а именно: емкость, положение и предел.
-
Общие методы буфера
- Buffer clear()
- Buffer flip()
- Buffer rewind()
- Buffer position(int newPosition)
-
Введение в использование/метод буфера:
- Выделение буфера:
ByteBuffer buf = ByteBuffer.allocate(28);//以ByteBuffer为例子
- Запись данных в буфер
Существует два способа записи данных в буфер:
1. Запись данных из канала в буфер
int bytesRead = inChannel.read(buf); //read into buffer.
2. Записать данные через put:
buf.put(127);
-
Проверка общего метода буфера
Честно говоря, программирование NIO действительно сложно, и в следующем тестовом примере вы можете с трудом понять функцию метода Buffer, упомянутого выше.
Три канала Java NIO
основное содержание:
-
Введение в канал
- Вообще говоря, все IO в NIO начинаются с Channel (канала).
- Разница между каналом NIO Channel и потоком:
- Использование FileChannel
- Использование SocketChannel и ServerSocketChannel
- ️Использование DatagramChannel
-
Scatter / Gather
- Разброс: информация, считанная из канала, разбрасывается по N буферам (буферам).
- Собрать: отправить содержимое N буферов в канал по порядку.
-
передача данных между каналами
- В Java NIO, если канал имеет тип FileChannel, он может напрямую передавать данные в другой канал.
- TransferFrom() : метод TransferFrom передает данные из источника канала в FileChannel.
- TransferTo() : метод TransferTo передает данные FileChannel в другой канал.
Четыре Селектор Java NIO (селектор)
основное содержание:
-
Введение в селектор
- Селектор вообще называется селектором, конечно можно перевести и как мультиплексор. Это один из основных компонентов Java NIO, который используется для проверки того, доступно ли состояние одного или нескольких каналов NIO для чтения и записи. Таким образом, один поток может управлять несколькими каналами, то есть можно управлять несколькими сетевыми ссылками.
- Преимущество использования Selector заключается в том, что он использует меньше потоков для обработки канала и позволяет избежать накладных расходов на переключение контекста потока по сравнению с использованием нескольких потоков.
-
Как использовать селектор
- Создание селектора
Selector selector = Selector.open();
- Зарегистрируйте канал в селекторе (канал должен быть неблокирующим)
channel.configureBlocking(false); SelectionKey key = channel.register(selector, Selectionkey.OP_READ);
-
Введение в SelectionKey
Ключ SelectionKey представляет отношение регистрации между конкретным объектом канала и конкретным объектом селектора.
-
Выбор каналов с помощью селектора (Выбор каналов с помощью селектора)
Селектор поддерживает набор зарегистрированных каналов, и это отношение регистрации инкапсулировано в SelectionKey.
-
Как перестать выбирать
метод wakeup() и метод close().
-
код шаблона
С кодом шаблона, когда мы пишем программы, большую часть времени мы добавляем соответствующий бизнес-код в код шаблона.
-
Простой пример взаимодействия между клиентом и сервером
Пять 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):