Отредактировано: чтобы сделать вопрос менее «основанным на мнении»
Я хочу попросить подсказанный способ использования байтового буфера в случае чередования чтения / записи.
Мои программные процессы случайная последовательность NIO, которая выполняет операции read()
и write()
с ByteBuffer
. В настоящее время я использую переменную для записи, была ли последняя операция read()
или write()
, и вызываю flip()
или compact()
соответственно.
Это лучший подход или ByteBuffer не предназначен для обработки этого задача?
Исходный заголовок вопроса: Java ByteBuffer плохо спроектирован?
Я только начал с Java NIO, и я думаю, что Bytebuffer спроектирован таким образом, чтобы чередование трудно выполнить операции чтения / записи. Если такой шаблон операций и является причиной того, что у нас есть «буфер» в NIO.
В частности, flip()
и compact()
- ненужные детали для программирования. Если у меня есть случайная последовательность read()
и write()
для байтового буфера, то у меня нет выбора, кроме как сохранить отдельную переменную, чтобы отслеживать, был ли буфер «перевернут». Например, для перевернутого буфера мне нужно снова compact()
перед write
, но я не могу этого сделать для неоткрытого буфера.
ИМО, почти нет случаев, когда write()
следует за read()
не нужно сначала звонить compact()
или clear()
. Кроме того, нет read()
после write()
без flip()
, поэтому я думаю, что должно быть сделано либо:
- сделать 'режим чтения' и 'режим записи' явным и выдать предупреждение, если запись в режим чтения или наоборот. Используйте явную команду
readMode()
или writeMode()
для переключения. - устраните необходимость переворачивания / сжатия перед чтением / записью, либо приняв другой дизайн (например, кольцевой буфер), либо сделав его неявным в чтении / пишите.
Поскольку я все еще новичок в Java, я хочу знать, является ли моя жалоба le git или при реализации Bytebuffer происходит тщательный выбор дизайна?