Java - Buffer
Concepto
-
Es una
pieza de memoria
que se utiliza paraleer
yescribir
datos- Se utiliza para interactuar con el canal
NIO
deJava
- Se utiliza para interactuar con el canal
-
Un
buffer
tiene una posición , un límite y una capacidad -
La posición es el
índice
del siguiente elemento que se leerá o escribirá -
El límite es el índice del primer elemento que no debe leerse o escribirse
-
La capacidad es el número máximo de elementos que se pueden almacenar en el
buffer
. -
Bloque de memoria
quese utiliza
paraalmacenar temporalmente
datos-
Mientras se
transfieren
entredos dispositivos
-
Entre un
programa
y undispositivo
-
-
Te
permite que
losdatos
seescriban
olean
enbloques
más grandes -
Puede
mejorar
elrendimiento
alreducir
elnúmero de operaciones
deEntrada/Salida
-
Ejemplo
// Crear un ``buffer`` en Java:
ByteBuffer buf = ByteBuffer.allocate(48);
-
Existen clases de
buffer
en el paquetejava.nio
para trabajar conbufferes
de diferentes tipos de datos -
ByteBuffer
-
Es una
clase
debuffer
que se utiliza paramanipular datos
de tipobyte
-
Proporciona una serie de
métodos
paraleer
yescribir datos
en elbuffer
- Para manipular la
posición
y loslímites
delbuffer
- Para manipular la
-
Clase
preferida debido a que el tipo dedato byte
es elmás versátil
-
Ejemplo
-
Podemos usar
bytes
para componer otros tiposprimitivos no booleanos
enJVM
→(Java Virtual Machine)
-
Podemos usar
bytes
paratransferir datos
entreJVM
ydispositivos
deentrada/salida
externos
-
-
-
import java.nio.ByteBuffer;
public class ByteBufferExample {
public static void main(String[] args) {
// • allocate() → Asigna un nuevo búfer de bytes
// - La posición del nuevo búfer será cero,
// su límite será la capacidad (8) en este caso
// - Su marca será indefinida :
// (La marca de un ByteBuffer es un índice que se puede establecer
// y luego restablecer en una posición específica en el búfer.
// ♦ Cuando se llama al método allocate() de la clase ByteBuffer,
// la marca se establece en un "valor indefinido"
// - Esto significa que no se puede confiar en el valor de la marca
// hasta que se establezca explícitamente)
// - Cada uno de sus elementos se inicializará a cero y su orden de bytes será BIG_ENDIAN.
// Tendrá un array de respaldo y su offset de array será 0
ByteBuffer buffer = ByteBuffer.allocate(8);
// • Método put() relativo (operación opcional)
// Escribe el byte dado en este búfer en la posición actual, y luego incrementa la posición.
// ↓
buffer.put((byte) 1);
buffer.put((byte) 2);
buffer.put((byte) 3);
buffer.put((byte) 4);
buffer.flip();
while (buffer.hasRemaining()) {
System.out.print(buffer.get() + " ");
}
}
}
-
CharBuffer
-
Clase
enJava SE
que representa unbuffer
de caracteres -
Define
cuatro categorías
de operaciones sobre losbuffer
es de caracteresMétodos de obtención
- Colocación absolutos y relativos que
leen
yescriben
caracteres individuales
Métodos de obtención masiva relativos
- Transfieren secuencias contiguas de caracteres desde este
buffer
a unamatriz
Métodos de colocación masiva relativos
- Transfieren secuencias contiguas de caracteres desde una matriz de caracteres y una cadena o algún otro
buffer
de caracteres a estebuffer
- Métodos para
compactar
,duplicar
ycortar
unbuffer
de caracteres
-
Los
buffer
es de caracteres se pueden crear mediante asignación -
Asigna espacio para el contenido del
buffer
envolviendo unamatriz
decaracteres
o unacadena
existente en unbuffer
-
Creando una vista de un
buffer
debytes
existente -
Al igual que un
buffer
debytes
unbuffer
de caracteres esdirecto
ono directo
-
Un
buffer
decaracteres
creado a través de los métodoswrap()
de estaclase
seráno directo
- Un
buffer
decaracteres
creado como una vista de unbuffer
debytes
será directo si el propiobuffer
debytes
es directo 1.
- Un
-
// Ejemplo básico de cómo se puede usar un buffer en Java
import java.nio.CharBuffer;
public class BufferExample {
public static void main(String[] args) {
// Se crea un `CharBuffer` con una capacidad de 8 caracteres.
CharBuffer buffer = CharBuffer.allocate(8);
// Se agregan algunos caracteres al buffer usando el método `put()`
buffer.put('H');
buffer.put('o');
buffer.put('l');
buffer.put('a');
// Después de agregar los caracteres, se llama al método `flip()` para preparar el buffer para la lectura.
buffer.flip();
// Se lee el contenido del buffer usando el método `get()` en un bucle while hasta que ya no queden más caracteres en el buffer
while (buffer.hasRemaining()) {
System.out.print(buffer.get());
}
}
}
-
IntBuffer
-
Clase de Java SE que representa un
buffer
de enteros -
Esta clase define cuatro categorías de operaciones sobre los
buffer
de enteros -
Métodos de obtención , colocación absolutos , relativos que leen y escriben enteros individuales
-
Métodos de obtención masiva relativos que transfieren secuencias contiguas de enteros desde este
buffer
a una matriz -
Métodos de colocación masiva relativos que transfieren secuencias contiguas de enteros desde una matriz de enteros o algún otro
buffer
de enteros a estebuffer
-
Métodos para compactar, duplicar y cortar un
buffer
de enteros -
Los
buffer
es de enteros se pueden crear mediante la asignación, que asigna espacio para el contenido delbuffer
envolviendo una matriz de enteros existente en unbuffer
o creando una vista de unbuffer
de bytes existente -
Al igual que un
buffer
de bytes unbuffer
de enteros puede ser directo o no directo -
Un
buffer
de enteros creado a través de los métodos wrap() de esta clase será no directo -
Un
buffer
de enteros creado como una vista de unbuffer
de bytes será directo si el propiobuffer
debytes
es directo
-
-
Ejemplo
// Crea un IntBuffer con capacidad para 10 enteros
// utilizando el método allocate() de la clase IntBuffer
import java.nio.IntBuffer;
public class IntBufferExample {
public static void main(String[] args) {
// Crear un IntBuffer con capacidad para 10 enteros
IntBuffer buffer = IntBuffer.allocate(10);
// Colocan algunos enteros en el buffer utilizando el método put()
// Poner algunos enteros en el buffer
buffer.put(1);
buffer.put(2);
buffer.put(3);
buffer.put(4);
// Preparar el buffer para la lectura
// Antes de leer los enteros del buffer preparar para la lectura llamando al método flip()
buffer.flip();
// Leer los enteros del buffer
while (buffer.hasRemaining()) {
System.out.print(buffer.get() + " ");
}
}
}
-
Clases
que proporcionanmétodos
paraleer
yescribir
datos en elbuffer
-
Como para
manipular
laposición
y loslímites
delbuffer
Ejemplo
-
Cómo usar un
CharBuffer
en Java paraalmacenar
yrecuperar
caracteres -
Hay otras operaciones que puedes realizar con
bufferes
-
Como
manipular
laposición
-
Los
límites
delbuffer
,marcar
yrestablecer
la posición delbuffer
Deja un comentario