Subclases indirectas conocidas |
Un contenedor de datos de un tipo específico.
Las instancias de DataBuffer
asignan segmentos de memoria nativa o de montón a una vista lineal que admite:
- Indexación de 64 bits, lo que permite trabajar con búfer de más de 2 31 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 ocurre con los búferes JDK estándar.
DataBuffer
sea lineal, especialmente cuando se trata de tipos no primitivos o buffers grandes. Métodos públicos
resumen <R> R | |
buffer de datos abstracto <T> | copyTo ( DataBuffer <T> dst, tamaño largo) Escriba las referencias de los objetos en la matriz fuente en este búfer. |
booleano abstracto | es igual (Objeto obj) Comprueba la igualdad entre los buffers de datos. |
resumen T | getObject (índice largo) Lee el valor en el índice dado. |
booleano abstracto | es solo lectura () Indica si este búfer está respaldado por una matriz accesible. |
buffer de datos 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. |
buffer de datos abstracto <T> | compensación (índice largo) Crea un nuevo búfer cuyo contenido es una subsecuencia compartida del contenido de este búfer, comenzando en el índice dado. |
buffer de datos abstracto <T> | leer (T[] horario) Lea las referencias de los objetos en este búfer en la matriz de destino. |
buffer de datos abstracto <T> | leer (T[] dst, desplazamiento int, longitud int) Lea las referencias de los objetos en este búfer en la matriz de destino. |
buffer de datos abstracto <T> | setObject (valor T, índice largo) Escribe el valor dado en este búfer en el índice dado. |
resumen largo | tamaño () Tamaño del buffer, en elementos. |
buffer de datos 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 una DataBufferWindow que proporciona una vista parcial de este búfer. |
buffer de datos abstracto <T> | escribir (T[] origen) Escriba las referencias de los objetos en la matriz fuente en este búfer. |
buffer de datos abstracto <T> | escribir (T[] origen, int desplazamiento, int longitud) Método de venta masiva, utilizando matrices int. |
Métodos públicos
resumen público R aceptar ( 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 sólo 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 buffer |
---|
Devoluciones
- el mismo valor devuelto por el visitante
public abstract DataBuffer <T> copyTo ( DataBuffer <T> dst, tamaño largo)
Escriba las referencias de los objetos en la matriz fuente 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 genera 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()
, entonces se lanza una BufferUnderfloatException.
De lo contrario, este método copia n = size
de este búfer al búfer de destino.
Parámetros
horario de verano | el búfer de destino en el que se copian los valores; no debe ser este buffer |
---|---|
tamaño | número de valores para copiar al búfer de destino |
Devoluciones
- este buffer
Lanza
Excepción de argumento ilegal | si el buffer de destino es este buffer |
---|---|
Excepción de sólo lectura de búfer | si el buffer de destino es de solo lectura |
Excepción de desbordamiento de búfer | si no hay suficiente espacio en el buffer de destino |
Excepción de flujo de búfer | si no hay suficientes valores en el búfer de origen |
booleano abstracto público es igual (Objeto obj)
Comprueba la igualdad entre los buffers de datos.
Un buffer 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 buffers 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
objeto | objeto para comparar este buffer con |
---|
Devoluciones
- Verdadero si este buffer es igual al objeto proporcionado
resumen público T getObject (índice largo)
Lee el valor en el índice dado. Importante: El uso de este método debe limitarse a buffers de tipos no primitivos o cuando el autor de la llamada 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 cual se leerá el flotante |
---|
Devoluciones
- el valor en el índice dado
Lanza
Excepción IndexOutOfBounds | si el índice es negativo o no es menor que el tamaño del búfer |
---|
booleano abstracto público isReadOnly ()
Indica si este búfer está respaldado por una matriz accesible.
Devoluciones
- Verdadero si, y sólo si, este buffer es de sólo lectura
Resumen público DataBuffer <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.
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 sólo lectura si, y sólo si, este búfer es de sólo lectura.
Esta llamada es equivalente a slice(0, size)
Parámetros
tamaño | tamaño de este nuevo buffer |
---|
Devoluciones
- el nuevo buffer
Lanza
Excepción de argumento ilegal | si los valores de índice y/o tamaño no pasan las comprobaciones de validación |
---|
desplazamiento público abstracto de DataBuffer <T> (índice 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 sólo lectura si, y sólo si, este búfer es de sólo lectura.
Esta llamada es equivalente a slice(index, size() - index)
Parámetros
índice | El índice del primer valor del nuevo buffer creado no debe ser mayor que size() |
---|
Devoluciones
- el nuevo buffer
Lanza
Excepción de argumento ilegal | si el índice no pasa las comprobaciones de validación |
---|
lectura pública abstracta de DataBuffer <T> (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 transfiere ningún valor y se genera una BufferUnderflowException.
De lo contrario, este método copia los valores n = dst.length
de este búfer en la matriz dada.
Parámetros
horario de verano | la matriz en la que se escribirán los valores |
---|
Devoluciones
- este buffer
Lanza
Excepción de flujo de búfer | si no hay suficientes valores para copiar desde este buffer |
---|
lectura pública abstracta de DataBuffer <T> (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 transfiere ningún valor y se genera una BufferUnderflowException.
De lo contrario, este método copia n = length
de este búfer en la matriz dada comenzando en el desplazamiento dado.
Parámetros
horario de verano | la matriz en la que se escribirán los valores |
---|---|
compensar | el desplazamiento dentro de la matriz del primer valor que se escribirá; debe ser no negativo y no mayor que dst.length |
longitud | 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 buffer
Lanza
Excepción de flujo de búfer | si quedan menos valores de longitud en este búfer |
---|---|
Excepción IndexOutOfBounds | si las condiciones previas de los parámetros de desplazamiento y longitud no se cumplen |
DataBuffer abstracto público <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 buffers de tipos no primitivos o cuando el autor de la llamada 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 buffer
Lanza
Excepción IndexOutOfBounds | si el índice es negativo o no es menor que el tamaño del búfer |
---|---|
Excepción de sólo lectura de búfer | si este buffer es de solo lectura |
resumen público de tamaño largo ()
Tamaño del buffer, en elementos.
Por ejemplo, en el caso de un búfer de bytes, este valor es igual al número de bytes que este búfer puede contener. Para un búfer de números enteros, es igual al número de números enteros, por lo tanto, el tamaño en bytes de este búfer es size() * Integer.BYTES
.
Devoluciones
- el tamaño del buffer
segmento de DataBuffer <T> abstracto público (í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.
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 sólo lectura si, y sólo si, este búfer es de sólo lectura.
Parámetros
índice | índice del primer valor del nuevo buffer creado |
---|---|
tamaño | El tamaño de este nuevo búfer no debe ser mayor que size() |
Devoluciones
- el nuevo buffer
Lanza
Excepción de argumento ilegal | si el valor del tamaño no pasa las comprobaciones de validación |
---|
resumen público DataBufferWindow <? extiende la ventana DataBuffer <T>> (tamaño largo)
Crea una DataBufferWindow
que proporciona una vista parcial de este búfer.
La ventana creada tiene un tamaño fijo y puede "slide"
a lo largo de este búfer para proporcionar diferentes vistas de los datos sin asignar una nueva instancia de búfer, como lo hace 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
tamaño | tamaño de la ventana |
---|
Devoluciones
- una nueva ventana que comienza en el índice 0 de este buffer
Lanza
Excepción de operación no admitida | si este tipo de búfer no admite ventanas de búfer |
---|
Escritura de DataBuffer abstracto público <T> (T[] src)
Escriba las referencias de los objetos en la matriz fuente en este búfer.
Este método transfiere los valores de la matriz fuente 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 genera 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 desde la cual se leerán los valores |
---|
Devoluciones
- este buffer
Lanza
Excepción de desbordamiento de búfer | si no hay suficiente espacio en este búfer para los valores en la matriz de origen |
---|---|
Excepción de sólo lectura de búfer | si este buffer es de solo lectura |
escritura de DataBuffer abstracto público <T> (T[] src, int offset, int length)
Método de venta masiva, utilizando matrices int.
Este método transfiere los valores de la matriz fuente 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 genera una BufferOverflowException.
De lo contrario, este método copia n = length
de la matriz dada en este búfer, comenzando en el desplazamiento dado.
Parámetros
src | la matriz de origen desde la cual 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 |
longitud | 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 buffer
Lanza
Excepción de desbordamiento de búfer | si no hay suficiente espacio en este búfer para los valores en la matriz de origen |
---|---|
Excepción IndexOutOfBounds | si las condiciones previas de los parámetros de desplazamiento y longitud no se cumplen |
Excepción de sólo lectura de buffer | si este buffer es de solo lectura |