Ввод-вывод и файловая система
Карта
Как выбрать API
| Данные | API |
|---|
| изображение, архив, протокол | byte streams |
| текст известной кодировки | reader/writer |
| маленький текстовый файл | Files.readString/writeString |
| большой файл | buffered stream/reader |
| обход каталога | Files.list, walk, walkFileTree |
Общие правила контракта
- Явно определить владельца ресурса: кто открыл, тот обычно закрывает.
- Использовать try-with-resources.
- Не рассчитывать, что один
read заполнит buffer.
- Зафиксировать charset на byte/char границе.
- Для больших данных не использовать
readAllBytes/readAllLines без лимита.
- Разделять EOF, timeout, отмену и I/O-ошибку.
На собеседовании
- Почему
read() возвращает int? Нужно отдельное значение -1 для EOF.
- Где появляется кодировка? При преобразовании байтов и символов.
- Что закрывает try-with-resources при двух ресурсах? Оба, в обратном порядке объявления.
- Path гарантирует существование? Нет.