DataBuffer

interfaz pública DataBuffer
Subclases indirectas conocidas

Un contenedor de datos de un tipo específico.

Las instancias de DataBuffer asignan segmentos de memoria nativa o de pila a una vista lineal que admite:

  • Indexación de 64 bits, lo que permite trabajar con búfer de más de 231 bytes
  • Almacenamiento de objetos de cualquier tipo y no solo primitivos.
  • Los tipos genéricos también permiten trabajar directamente con tipos en caja, lo que no requiere tipos de búfer explícitos como con los búferes estándar de JDK.
Es importante tener en cuenta que no hay garantía de que la memoria administrada por un DataBuffer sea ​​lineal, especialmente cuando se trata de tipos no primitivos o búferes grandes.

Métodos públicos

resumen <R> R
aceptar ( visitante de DataStorageVisitor <R>)
Visita el almacenamiento de respaldo de este búfer.
DataBuffer abstracto <T>
copyTo ( DataBuffer <T> dst, tamaño largo)
Escriba las referencias de los objetos en la matriz de origen en este búfer.
booleano abstracto
es igual a (Objeto obj)
Comprueba la igualdad entre los búferes de datos.
T abstracto
getObject (índice largo)
Lee el valor en el índice dado.
booleano abstracto
isReadOnly ()
Indica si este búfer está respaldado por una matriz accesible.
DataBuffer abstracto <T>
estrecho (tamaño largo)
Crea un nuevo búfer cuyo contenido es una subsecuencia compartida del contenido de este búfer, cuyo tamaño se establece en el valor dado.
DataBuffer abstracto <T>
desplazamiento (índice largo)
Crea un nuevo búfer cuyo contenido es una subsecuencia compartida del contenido de este búfer, comenzando en el índice dado.
DataBuffer abstracto <T>
leer (T [] dst)
Lea las referencias de los objetos en este búfer en la matriz de destino.
DataBuffer abstracto <T>
leer (T [] dst, int offset, int length)
Lea las referencias de los objetos en este búfer en la matriz de destino.
DataBuffer abstracto <T>
setObject (valor T, índice largo)
Escribe el valor dado en este búfer en el índice dado.
abstracto largo
tamaño ()
Tamaño del búfer, en elementos.
DataBuffer abstracto <T>
rebanada (índice largo, tamaño largo)
Crea un nuevo búfer cuyo contenido es una subsecuencia compartida del contenido de este búfer, comenzando en el índice dado y del tamaño dado.
resumen DataBufferWindow <? extiende DataBuffer <T>>
ventana (tamaño largo)
Crea un DataBufferWindow que proporciona una vista parcial de este búfer.
DataBuffer abstracto <T>
escribir (T [] src)
Escriba las referencias de los objetos en la matriz de origen en este búfer.
DataBuffer abstracto <T>
escribir (T [] src, int offset, int length)
Mayor puso método, utilizando matrices int.

Métodos públicos

public abstract R accept ( DataStorageVisitor <R> visitante)

Visita el almacenamiento de respaldo de este búfer.

La implementación del búfer es responsable de devolver una referencia al almacenamiento de datos real al visitante proporcionado. El visitante no tiene que manejar todos los tipos posibles de almacenamiento de datos y puede anular solo los métodos de almacenamiento que realmente le interesan. Para cualquier otro tipo de almacenamiento, esta llamada recurrirá a fallback() para que el visitante pueda ejecutar alguna rutina genérica si necesario.

Parámetros
visitante visita el almacenamiento de datos de este búfer
Devoluciones
  • el mismo valor devuelto por el visitante

resumen público DataBuffer <T> copyTo ( DataBuffer <T> dst, tamaño largo)

Escriba las referencias de los objetos en la matriz de origen en este búfer.

Si hay más valores para copiar que el tamaño del búfer de destino, es decir, size > dst.size() , no se transfieren valores y se lanza una BufferOverflowException. Por otro lado, si hay más valores para copiar que el tamaño del búfer de origen, es decir, > src.size() , se lanza una BufferUnderfloatException.

De lo contrario, este método copia n = size valores de n = size de este búfer en el búfer de destino.

Parámetros
dst el búfer de destino en el que se copian los valores; no debe ser este búfer
Talla número de valores para copiar al búfer de destino
Devoluciones
  • este búfer
Lanza
Argumento de excepción ilegal si el búfer de destino es este búfer
ReadOnlyBufferException si el búfer de destino es de solo lectura
BufferOverflowException si no hay suficiente espacio en el búfer de destino
BufferUnderflowException si no hay suficientes valores en el búfer de origen

público abstracto booleano es igual (Objeto obj)

Comprueba la igualdad entre los búferes de datos.

Un búfer de datos es igual a otro objeto si este objeto es otro DataBuffer del mismo tamaño, tipo y los elementos son iguales y en el mismo orden. Por ejemplo:

IntDataBuffer buffer = DataBuffers.of(1, 2, 3);

 assertEquals(buffer, DataBuffers.of(1, 2, 3));  // true
 assertEquals(buffer, DataBuffers.ofObjects(1, 2, 3));  // true, as Integers are equal to ints
 assertNotEquals(buffer, DataBuffers.of(1, 2, 3, 0));  // false, different sizes
 assertNotEquals(buffer, DataBuffers.of(1, 3, 2));  // false, different order
 assertNotEquals(buffer, DataBuffers.of(1L, 2L, 3L));  // false, different types
 

Tenga en cuenta que el cálculo necesario para verificar la igualdad entre dos búferes puede ser costoso en algunos casos y, por lo tanto, se recomienda no utilizar este método en una ruta crítica donde el rendimiento importa.

Parámetros
obj objeto para comparar este búfer con
Devoluciones
  • verdadero si este búfer es igual al objeto proporcionado

public abstract T getObject (índice largo)

Lee el valor en el índice dado. Importante: El uso de este método debe limitarse a búferes de tipos no primitivos o cuando el llamador no conoce de manera determinista el tipo de datos. En cualquier otro caso, prefiera el uso de su variante primitiva que mejorará significativamente el rendimiento (por ejemplo, IntDataBuffer.getInt(idx)

Parámetros
índice el índice desde el que se leerá el flotador
Devoluciones
  • el valor en el índice dado
Lanza
IndexOutOfBoundsException si el índice es negativo o no menor que el tamaño del búfer

isReadOnly () booleano abstracto público

Indica si este búfer está respaldado por una matriz accesible.

Devoluciones
  • Verdadero si, y solo si, este búfer es de solo lectura

DataBuffer <T> abstracto público estrecho (tamaño largo)

Crea un nuevo búfer cuyo contenido es una subsecuencia compartida del contenido de este búfer, cuyo tamaño se establece en el valor dado.

El nuevo tamaño no debe ser mayor que este tamaño de búfer. Los cambios en el contenido de este búfer serán visibles en el nuevo búfer y viceversa. El nuevo búfer será de solo lectura si, y solo si, este búfer es de solo lectura.

Esta llamada es equivalente a slice(0, size)

Parámetros
Talla tamaño de este nuevo búfer
Devoluciones
  • el nuevo búfer
Lanza
Argumento de excepción ilegal si los valores de índice y / o tamaño no pasan las comprobaciones de validación

pública abstracta DataBuffer <T> offset (índice de largo)

Crea un nuevo búfer cuyo contenido es una subsecuencia compartida del contenido de este búfer, comenzando en el índice dado.

El índice no debe ser mayor que este tamaño de búfer. Los cambios en el contenido de este búfer serán visibles en el nuevo búfer y viceversa. El nuevo búfer será de solo lectura si, y solo si, este búfer es de solo lectura.

Esta llamada es equivalente a slice(index, size() - index)

Parámetros
índice índice del primer valor del nuevo búfer creado, no debe ser mayor que size()
Devoluciones
  • el nuevo búfer
Lanza
Argumento de excepción ilegal si el índice no pasa las comprobaciones de validación

DataBuffer <T> abstracto público leer (T [] dst)

Lea las referencias de los objetos en este búfer en la matriz de destino.

Este método transfiere valores de este búfer a la matriz de destino dada. Si hay menos valores en el búfer de los necesarios para satisfacer la solicitud, es decir, si dst.length > size() , no se transfieren valores y se lanza una BufferUnderflowException.

De lo contrario, este método copia los valores n = dst.length de este búfer en la matriz dada.

Parámetros
dst la matriz en la que se escribirán los valores
Devoluciones
  • este búfer
Lanza
BufferUnderflowException si no hay suficientes valores para copiar de este búfer

DataBuffer <T> abstracto público leer (T [] dst, int offset, int length)

Lea las referencias de los objetos en este búfer en la matriz de destino.

Este método transfiere valores de este búfer a la matriz de destino dada. Si hay menos valores en el búfer de los necesarios para satisfacer la solicitud, es decir, si length > size() , no se transfieren valores y se lanza una BufferUnderflowException.

De lo contrario, este método copia n = length valores de n = length de este búfer en la matriz dada comenzando en el desplazamiento dado.

Parámetros
dst la matriz en la que se escribirán los valores
compensar el desplazamiento dentro de la matriz del primer valor que se va a escribir; debe ser no negativo y no mayor que dst.length
largo el número máximo de valores que se escribirán en la matriz dada; debe ser no negativo y no mayor que dst.length - offset
Devoluciones
  • este búfer
Lanza
BufferUnderflowException si quedan menos de los valores de longitud en este búfer
IndexOutOfBoundsException si las condiciones previas en los parámetros de desplazamiento y longitud no se cumplen

public abstract DataBuffer <T> setObject (valor T, índice largo)

Escribe el valor dado en este búfer en el índice dado. Importante: El uso de este método debe limitarse a búferes de tipos no primitivos o cuando el llamador no conoce de manera determinista el tipo de datos. En cualquier otro caso, prefiera el uso de su variante primitiva que mejorará significativamente el rendimiento (por ejemplo, IntDataBuffer.setInt(idx)

Parámetros
valor el valor a escribir
índice el índice en el que se escribirá el valor
Devoluciones
  • este búfer
Lanza
IndexOutOfBoundsException si el índice es negativo o no menor que el tamaño del búfer
ReadOnlyBufferException si este búfer es de solo lectura

resumen público tamaño largo ()

Tamaño del búfer, en elementos.

Por ejemplo, en el caso de un búfer de bytes, este valor es igual al número de bytes que puede contener este búfer. Para un búfer de enteros, es igual al número de enteros, por lo tanto, el tamaño en bytes de este búfer es size() * Integer.BYTES .

Devoluciones
  • el tamaño del búfer

pública abstracta DataBuffer <T> rebanada (índice de largo, el tamaño de largo)

Crea un nuevo búfer cuyo contenido es una subsecuencia compartida del contenido de este búfer, comenzando en el índice dado y del tamaño dado.

El índice más el nuevo tamaño no debe ser mayor que este tamaño de búfer. Los cambios en el contenido de este búfer serán visibles en el nuevo búfer y viceversa. El nuevo búfer será de solo lectura si, y solo si, este búfer es de solo lectura.

Parámetros
índice índice del primer valor del nuevo búfer creado
Talla tamaño de este nuevo búfer, no debe ser mayor que el size()
Devoluciones
  • el nuevo búfer
Lanza
Argumento de excepción ilegal si el valor del tamaño no pasa las comprobaciones de validación

resumen público DataBufferWindow <? se extiende DataBuffer ventana <T >> (tamaño de largo)

Crea un DataBufferWindow que proporciona una vista parcial de este búfer.

La ventana creada tiene un tamaño fijo y puede "slide" largo de este búfer para proporcionar diferentes vistas de los datos sin asignar una nueva instancia del búfer, como hace el offset(long) . Esto mejora el rendimiento general cuando esta operación se repite con frecuencia. Por ejemplo:

IntDataBuffer bufferA = DataBuffers.ofInts(1024);
 // ... init buffer data
 IntDataBuffer bufferB = DataBuffers.ofInts(1, 2, 3, 4);

 // Return the index of the first occurrence of bufferB in bufferA using a sliding window
 DataBufferWindow<IntDataBuffer> windowA = bufferA.window(4);
 for (int i = 0; i < bufferA.size() - bufferB.size(); ++i) {
     if (windowA.slideTo(i).buffer().equals(bufferB)) {
         return i;
     
 }
 }

El objeto devuelto tiene estado y no es seguro para subprocesos.

Parámetros
Talla tamaño de la ventana
Devoluciones
  • una nueva ventana que comienza en el índice 0 de este búfer
Lanza
UnsupportedOperationException si este tipo de búfer no admite ventanas de búfer

resumen público DataBuffer <T> escribir (T [] src)

Escriba las referencias de los objetos en la matriz de origen en este búfer.

Este método transfiere los valores de la matriz de origen dada a este búfer. Si hay más valores en la matriz de origen que en este búfer, es decir, si src.length > size() , no se transfieren valores y se lanza una BufferOverflowException.

De lo contrario, este método copia los valores n = src.length de la matriz dada.

Parámetros
src la matriz de origen de la que se leerán los valores
Devoluciones
  • este búfer
Lanza
BufferOverflowException si no hay suficiente espacio en este búfer para los valores en la matriz de origen
ReadOnlyBufferException si este búfer es de solo lectura

Public abstract DataBuffer <T> write (T [] src, int offset, int length)

Mayor puso método, utilizando matrices int.

Este método transfiere los valores de la matriz de origen dada a este búfer. Si hay más valores en la matriz de origen que en este búfer, es decir, si length > size() , no se transfieren valores y se lanza una BufferOverflowException.

De lo contrario, este método copia n = length valores de n = length de la matriz dada en este búfer, comenzando en el desplazamiento dado.

Parámetros
src la matriz de origen de la que se leerán los valores
compensar el desplazamiento dentro de la matriz del primer valor a leer; debe ser no negativo y no mayor que src.length
largo el número de valores que se leerán de la matriz dada; debe ser no negativo y no mayor que src.length - offset
Devoluciones
  • este búfer
Lanza
BufferOverflowException si no hay suficiente espacio en este búfer para los valores en la matriz de origen
IndexOutOfBoundsException si las condiciones previas en los parámetros de desplazamiento y longitud no se cumplen
ReadOnlyBufferException si este búfer es de solo lectura