Каковы примеры приложений для ByteBuffer
в Java? Пожалуйста, перечислите любые примеры сценариев, где это используется. Спасибо!
java
buffer
bytebuffer
Aklin
источник
источник
Ответы:
Это хорошее описание его использования и недостатков. По сути, вы используете его всякий раз, когда вам нужно сделать быстрый ввод-вывод низкого уровня. Если вы собираетесь реализовать протокол TCP / IP или если вы пишете базу данных (СУБД), этот класс пригодится.
источник
Класс ByteBuffer важен, потому что он формирует основу для использования каналов в Java. Класс ByteBuffer определяет шесть категорий операций над байтовыми буферами, как указано в документации по Java 7 :
Example code : Putting Bytes into a buffer.
источник
Java IO с использованием потоково-ориентированных API выполняется с использованием буфера в качестве временного хранилища данных в пространстве пользователя. Данные, считанные с диска DMA, сначала копируются в буферы в пространстве ядра, которые затем передаются в буфер в пространстве пользователя. Отсюда и накладные расходы. Отказ от этого может привести к значительному увеличению производительности.
Мы могли бы пропустить этот временный буфер в пользовательском пространстве, если бы был прямой доступ к буферу в пространстве ядра. Java NIO предоставляет способ сделать это.
ByteBuffer
входит в число нескольких буферов, предоставляемых Java NIO. Это просто контейнер или резервуар для хранения данных для чтения или записи данных. Вышеупомянутое поведение достигается путем выделения прямого буфера с использованиемallocateDirect()
API на буфере.Документация по Java для Byte Buffer содержит полезную информацию.
источник
В Android вы можете создать общий буфер между C ++ и Java (с помощью метода directAlloc) и манипулировать им с обеих сторон.
источник
Вот отличная статья, объясняющая преимущества ByteBuffer. Ниже приведены ключевые моменты в статье:
Ниже приведены преимущества специально для прямого ByteBuffer / MappedByteBuffer. Обратите внимание, что прямые буферы создаются вне кучи:
Не зависит от циклов gc : прямые буферы не будут перемещаться во время циклов сборки мусора, поскольку они находятся вне кучи. Технология кэширования TerraCota BigMemory, похоже, в значительной степени опирается на это преимущество. Если бы они были в куче, это замедлило бы время ожидания gc.
Повышение производительности : в потоковом вводе-выводе вызовы чтения повлекут за собой системные вызовы, которые требуют переключения контекста между режимами пользователя и ядра и наоборот, что будет дорогостоящим, особенно если к файлу обращаются постоянно. Однако при отображении в память это переключение контекста уменьшается, поскольку данные с большей вероятностью будут найдены в памяти (MappedByteBuffer). Если данные доступны в памяти, доступ к ним осуществляется напрямую, без вызова ОС, т. Е. Без переключения контекста.
Обратите внимание, что MappedByteBuffers очень полезны, особенно если файлы большие и к нескольким группам блоков обращаются чаще.
источник