Java - Buffer
Concepto
-
Es una
pieza de memoriaque se utiliza paraleeryescribirdatos- Se utiliza para interactuar con el canal
NIOdeJava
- Se utiliza para interactuar con el canal
-
Un
buffertiene una posición , un límite y una capacidad -
La posición es el
índicedel 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 memoriaquese utilizaparaalmacenar temporalmentedatos-
Mientras se
transfierenentredos dispositivos -
Entre un
programay undispositivo
-
-
Te
permite quelosdatosseescribanoleanenbloquesmás grandes -
Puede
mejorarelrendimientoalreducirelnúmero de operacionesdeEntrada/Salida -
Ejemplo
// Crear un ``buffer`` en Java:
ByteBuffer buf = ByteBuffer.allocate(48);
-
Existen clases de
bufferen el paquetejava.niopara trabajar conbufferesde diferentes tipos de datos -
ByteBuffer-
Es una
clasedebufferque se utiliza paramanipular datosde tipobyte -
Proporciona una serie de
métodosparaleeryescribir datosen elbuffer- Para manipular la
posicióny loslímitesdelbuffer
- Para manipular la
-
Clasepreferida debido a que el tipo dedato bytees elmás versátil-
Ejemplo
-
Podemos usar
bytespara componer otros tiposprimitivos no booleanosenJVM→(Java Virtual Machine) -
Podemos usar
bytesparatransferir datosentreJVMydispositivosdeentrada/salidaexternos
-
-
-
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-
ClaseenJava SEque representa unbufferde caracteres -
Define
cuatro categoríasde operaciones sobre losbufferes de caracteresMétodos de obtención
- Colocación absolutos y relativos que
leenyescribencaracteres individuales
Métodos de obtención masiva relativos
- Transfieren secuencias contiguas de caracteres desde este
buffera 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
bufferde caracteres a estebuffer
- Métodos para
compactar,duplicarycortarunbufferde caracteres
-
Los
bufferes de caracteres se pueden crear mediante asignación -
Asigna espacio para el contenido del
bufferenvolviendo unamatrizdecaractereso unacadenaexistente en unbuffer -
Creando una vista de un
bufferdebytesexistente -
Al igual que un
bufferdebytesunbufferde caracteres esdirectoono directo -
Un
bufferdecaracterescreado a través de los métodoswrap()de estaclaseseráno directo- Un
bufferdecaracterescreado como una vista de unbufferdebytesserá directo si el propiobufferdebyteses 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
bufferde enteros -
Esta clase define cuatro categorías de operaciones sobre los
bufferde 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
buffera una matriz -
Métodos de colocación masiva relativos que transfieren secuencias contiguas de enteros desde una matriz de enteros o algún otro
bufferde enteros a estebuffer -
Métodos para compactar, duplicar y cortar un
bufferde enteros -
Los
bufferes de enteros se pueden crear mediante la asignación, que asigna espacio para el contenido delbufferenvolviendo una matriz de enteros existente en unbuffero creando una vista de unbufferde bytes existente -
Al igual que un
bufferde bytes unbufferde enteros puede ser directo o no directo -
Un
bufferde enteros creado a través de los métodos wrap() de esta clase será no directo -
Un
bufferde enteros creado como una vista de unbufferde bytes será directo si el propiobufferdebyteses 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() + " ");
}
}
}
-
Clasesque proporcionanmétodosparaleeryescribirdatos en elbuffer -
Como para
manipularlaposicióny loslímitesdelbuffer
Ejemplo
-
Cómo usar un
CharBufferen Java paraalmacenaryrecuperarcaracteres -
Hay otras operaciones que puedes realizar con
bufferes
-
Como
manipularlaposición -
Los
límitesdelbuffer,marcaryrestablecerla posición delbuffer
Deja un comentario