¿Cuáles son las aplicaciones de ejemplo para a ByteBuffer
en Java? Enumere cualquier escenario de ejemplo donde se use esto. ¡Gracias!
java
buffer
bytebuffer
Aklin
fuente
fuente
Respuestas:
Esta es una buena descripción de sus usos y deficiencias. Básicamente, lo usa cuando necesita hacer E / S rápidas de bajo nivel. Si fuera a implementar un protocolo TCP / IP o si estuviera escribiendo una base de datos (DBMS), esta clase sería útil.
fuente
La clase ByteBuffer es importante porque forma una base para el uso de canales en Java. La clase ByteBuffer define seis categorías de operaciones sobre búferes de bytes, como se indica en la documentación de Java 7 :
Example code : Putting Bytes into a buffer.
fuente
Java IO utilizando API orientadas a la transmisión se realiza utilizando un búfer como almacenamiento temporal de datos dentro del espacio del usuario. Los datos leídos desde el disco por DMA se copian primero a las memorias intermedias en el espacio del núcleo, que luego se transfieren a la memoria intermedia en el espacio del usuario. Por lo tanto, hay gastos generales. Evitarlo puede lograr una ganancia considerable en el rendimiento.
Podríamos omitir este búfer temporal en el espacio del usuario, si hubiera una forma directa de acceder al búfer en el espacio del kernel. Java NIO proporciona una manera de hacerlo.
ByteBuffer
se encuentra entre varios buffers proporcionados por Java NIO. Es solo un contenedor o tanque de retención para leer o escribir datos. El comportamiento anterior se logra mediante la asignación de un búfer directo utilizandoallocateDirect()
API en el búfer.La documentación de Java de Byte Buffer tiene información útil.
fuente
En Android, puede crear un búfer compartido entre C ++ y Java (con el método directAlloc) y manipularlo en ambos lados.
fuente
Aquí hay un gran artículo que explica los beneficios de ByteBuffer. Los siguientes son los puntos clave en el artículo:
Los siguientes son beneficios específicos para ByteBuffer / MappedByteBuffer directo. Tenga en cuenta que las memorias intermedias directas se crean fuera del montón:
No se ven afectados por los ciclos gc : los buffers directos no se moverán durante los ciclos de recolección de basura ya que residen fuera del montón. La tecnología de almacenamiento en caché BigMemory de TerraCota parece depender en gran medida de esta ventaja. Si estuvieran en el montón, disminuiría los tiempos de pausa gc.
Aumento del rendimiento : en el flujo de E / S, las llamadas de lectura implicarían llamadas del sistema, que requieren un cambio de contexto entre el usuario al modo kernel y viceversa, lo que sería costoso, especialmente si se accede constantemente al archivo. Sin embargo, con el mapeo de memoria, este cambio de contexto se reduce ya que es más probable que los datos se encuentren en la memoria (MappedByteBuffer). Si los datos están disponibles en la memoria, se accede directamente sin invocar el sistema operativo, es decir, sin cambio de contexto.
Tenga en cuenta que MappedByteBuffers es muy útil, especialmente si los archivos son grandes y se accede con más frecuencia a pocos grupos de bloques.
fuente