Получить доступ

Что означают позиция, лимит и ёмкость у ByteBuffer, и что делает flip()?

MiddleВвод-вывод и NIO
Коротко

Ёмкость — размер буфера, позиция — курсор следующего чтения или записи, лимит — граница доступных данных. flip() ставит лимит на текущую позицию и обнуляет позицию — переключает буфер из записи в чтение.

  • clear() — подготовить к записи заново (данные не стираются)
  • compact() — сдвинуть непрочитанное в начало и продолжить запись
  • Забытый flip — читаете мусор или ничего

А ещё rewind() — перечитать с начала, не меняя лимит

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Буфер один и тот же для чтения и записи, поэтому режимы переключают вручную — на этом спотыкаются чаще всего. После записи данных позиция стоит за последним записанным байтом; flip запоминает её как лимит и возвращает позицию в ноль, чтобы прочитать ровно то, что записано. Дальше clear готовит буфер к новой записи (позиция в ноль, лимит в ёмкость), не стирая содержимое, а compact сдвигает непрочитанный остаток в начало — это нужно, когда данные вычитаны не полностью. Смена порядка байтов делается отдельно методом order, а не flip.

Что хотят услышать

  • Три величины.
  • flip, clear, compact.

Частые ошибки

  • Забыть flip перед чтением и получить ноль байтов.
  • Считать, что clear стирает данные — он лишь сбрасывает указатели.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓flip() выставляет лимит на текущую позицию и обнуляет позицию — переключение буфера из режима записи в режим чтения
  • ✗flip() меняет порядок байтов на противоположный
  • ✗flip() очищает буфер и обнуляет все три показателя
  • ✗flip() переставляет элементы буфера в обратном порядке

Что спросят дальше

  • Чем compact отличается от clear?
  • Что такое direct buffer и когда он оправдан?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем