Каково основное использование классов Java NIO Buffer? - PullRequest
2 голосов
/ 28 марта 2012

Я не понимаю, для чего эти классы Buffer.Разве они не для буферизации?Я думаю, что это должно означать, что один объект буфера должен позволять и читать и записывать это одновременно и независимо.Тем не менее, это не так: буфер допускает только один position, один для чтения и записи.Это означает, что если я что-то записал в буфер с относительным put(), то я не смогу прочитать что-нибудь чувствительное с относительным get().Также, если я буду называть put() и get() взаимозаменяемо, я получу бред.

Так есть ли какие-либо шаблоны использования (образцы) для буферов?Чтобы было очевидно, что эти буферы чем-то лучше обычных массивов?

1 Ответ

2 голосов
/ 28 марта 2012

ByteBuffer используется для чтения и записи данных, вы можете получить / поставить множество примитивных типов и управлять порядком байтов. Они могут быть оболочкой для файлов прямой памяти (без кучи) и файлов, отображаемых в памяти (также без кучи)

Они могут использоваться для производительности (так как они могут обращаться к длинным или двойным кодам без объединения байтов вместе), прямые байтовые буферы могут считывать / записывать данные без дополнительного копирования в память «Java». Файлы, отображаемые в память, могут быть расширены до размера вашего дискового пространства, что позволяет вам использовать много памяти, не влияя на время вашего GC.

...