DataBuffer

interfaccia pubblica DataBuffer
Sottoclassi indirette conosciute

Un contenitore di dati di un tipo specifico.

Le istanze di DataBuffer mappano segmenti di memoria nativi o heap su una vista lineare che supporta:

  • Indicizzazione a 64 bit, che consente di lavorare con buffer più grandi di 2 31 byte
  • Memorizzazione di oggetti di qualsiasi tipo e non solo primitivi
  • I tipi generici consentono di lavorare direttamente anche con i tipi boxed, che non richiedono tipi di buffer espliciti come con i buffer JDK standard.
È importante notare che non esiste alcuna garanzia che la memoria gestita da un DataBuffer sia lineare, specialmente quando si ha a che fare con tipi non primitivi o buffer di grandi dimensioni.

Metodi pubblici

estratto <R> R
accetta ( DataStorageVisitor <R> visitatore)
Visita l'archivio di backup di questo buffer.
buffer dati astratto <T>
copyTo ( DataBuffer <T> dst, dimensione lunga)
Scrivi i riferimenti degli oggetti nell'array di origine in questo buffer.
booleano astratto
è uguale a (Oggetto oggetto)
Controlla l'uguaglianza tra i buffer di dati.
astratto T
getObject (indice lungo)
Legge il valore dell'indice specificato.
booleano astratto
èSolaLettura ()
Indica se questo buffer è supportato o meno da un array accessibile.
buffer dati astratto <T>
stretto (taglia lunga)
Crea un nuovo buffer il cui contenuto è una sottosequenza condivisa del contenuto di questo buffer, la cui dimensione è impostata sul valore specificato.
buffer dati astratto <T>
offset (indice lungo)
Crea un nuovo buffer il cui contenuto è una sottosequenza condivisa del contenuto di questo buffer, a partire dall'indice specificato.
buffer dati astratto <T>
leggere (T[]dst)
Leggere i riferimenti degli oggetti in questo buffer nell'array di destinazione.
buffer dati astratto <T>
leggi (T[] dst, int offset, int lunghezza)
Leggere i riferimenti degli oggetti in questo buffer nell'array di destinazione.
buffer dati astratto <T>
setObject (valore T, indice lungo)
Scrive il valore dato in questo buffer in corrispondenza dell'indice dato.
astratto lungo
misurare ()
Dimensione del buffer, in elementi.
buffer dati astratto <T>
slice (indice lungo, dimensione lunga)
Crea un nuovo buffer il cui contenuto è una sottosequenza condivisa del contenuto di questo buffer, a partire dall'indice e dalla dimensione specificati.
astratto DataBufferWindow <? estende DataBuffer <T>>
finestra (formato lungo)
Crea un DataBufferWindow che fornisce una visualizzazione parziale di questo buffer.
buffer dati astratto <T>
scrivere (T[] src)
Scrivi i riferimenti degli oggetti nell'array di origine in questo buffer.
buffer dati astratto <T>
scrivere (T[] src, int offset, int lunghezza)
Metodo di immissione in blocco, utilizzando array int.

Metodi pubblici

public abstract R accetta ( DataStorageVisitor <R> visitatore)

Visita l'archivio di backup di questo buffer.

L'implementazione del buffer è responsabile di restituire al visitatore fornito un riferimento all'effettiva memorizzazione dei dati. Il visitatore non deve gestire tutti i possibili tipi di archiviazione dei dati e può sovrascrivere solo i metodi di archiviazione a cui è effettivamente interessato. Per qualsiasi altro tipo di archiviazione, questa chiamata eseguirà il fallback su fallback() in modo che il visitatore possa eseguire alcune routine generiche se necessario.

Parametri
visitatore visita la memorizzazione dei dati di questo buffer
ritorna
  • lo stesso valore restituito dal visitatore

public abstract DataBuffer <T> copyTo ( DataBuffer <T> dst, dimensione lunga)

Scrivi i riferimenti degli oggetti nell'array di origine in questo buffer.

Se sono presenti più valori da copiare rispetto alla dimensione del buffer di destinazione, ovvero size > dst.size() , non viene trasferito alcun valore e viene generata un'eccezione BufferOverflowException. D'altra parte, se ci sono più valori da copiare rispetto alla dimensione del buffer di origine, ad esempio > src.size() , viene lanciata un'eccezione BufferUnderfloatException.

Altrimenti, questo metodo copia n = size da questo buffer nel buffer di destinazione.

Parametri
dst il buffer di destinazione in cui vengono copiati i valori; non deve essere questo buffer
misurare numero di valori da copiare nel buffer di destinazione
ritorna
  • questo buffer
Lancia
IllegalArgumentException se il buffer di destinazione è questo buffer
ReadOnlyBufferException se il buffer di destinazione è di sola lettura
BufferOverflowException se non c'è abbastanza spazio nel buffer di destinazione
BufferUnderflowException se non ci sono abbastanza valori nel buffer di origine

Booleano astratto pubblico è uguale a (Oggetto obj)

Controlla l'uguaglianza tra i buffer di dati.

Un buffer di dati è uguale a un altro oggetto se questo oggetto è un altro DataBuffer della stessa dimensione, tipo e gli elementi sono uguali e nello stesso ordine. Ad esempio:

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
 

Si noti che il calcolo richiesto per verificare l'uguaglianza tra due buffer può essere costoso in alcuni casi e pertanto si consiglia di non utilizzare questo metodo in un percorso critico in cui le prestazioni contano.

Parametri
ogg oggetto con cui confrontare questo buffer
ritorna
  • true se questo buffer è uguale all'oggetto fornito

public abstract T getObject (indice lungo)

Legge il valore dell'indice specificato. Importante: l'utilizzo di questo metodo deve essere limitato ai buffer di tipi non primitivi o quando il tipo di dati non è conosciuto in modo deterministico dal chiamante. In ogni altro caso, preferisci l'utilizzo della sua variante primitiva che migliorerà significativamente le prestazioni (ad esempio IntDataBuffer.getInt(idx)

Parametri
indice l'indice da cui verrà letto il float
ritorna
  • il valore dell'indice dato
Lancia
IndexOutOfBoundsException se l'indice è negativo o non inferiore alla dimensione del buffer

booleano astratto pubblico isReadOnly ()

Indica se questo buffer è supportato o meno da un array accessibile.

ritorna
  • true se e solo se questo buffer è di sola lettura

public abstract DataBuffer <T> stretto (dimensione lunga)

Crea un nuovo buffer il cui contenuto è una sottosequenza condivisa del contenuto di questo buffer, la cui dimensione è impostata sul valore specificato.

La nuova dimensione non deve essere maggiore della dimensione del buffer. Le modifiche al contenuto di questo buffer saranno visibili nel nuovo buffer e viceversa. Il nuovo buffer sarà di sola lettura se, e solo se, questo buffer è di sola lettura.

Questa chiamata è equivalente a slice(0, size)

Parametri
misurare dimensione di questo nuovo buffer
ritorna
  • il nuovo tampone
Lancia
IllegalArgumentException se i valori di indice e/o dimensione non superano i controlli di validazione

public abstract DataBuffer <T> offset (indice lungo)

Crea un nuovo buffer il cui contenuto è una sottosequenza condivisa del contenuto di questo buffer, a partire dall'indice specificato.

L'indice non deve essere maggiore della dimensione del buffer. Le modifiche al contenuto di questo buffer saranno visibili nel nuovo buffer e viceversa. Il nuovo buffer sarà di sola lettura se, e solo se, questo buffer è di sola lettura.

Questa chiamata è equivalente a slice(index, size() - index)

Parametri
indice indice del primo valore del nuovo buffer creato, non deve essere maggiore di size()
ritorna
  • il nuovo tampone
Lancia
IllegalArgumentException se l'indice non supera i controlli di convalida

public abstract DataBuffer <T> lettura (T[] dst)

Leggere i riferimenti degli oggetti in questo buffer nell'array di destinazione.

Questo metodo trasferisce i valori da questo buffer nell'array di destinazione specificato. Se nel buffer sono presenti meno valori di quelli necessari per soddisfare la richiesta, ovvero se dst.length > size() , non viene trasferito alcun valore e viene generata un'eccezione BufferUnderflowException.

Altrimenti, questo metodo copia i valori n = dst.length da questo buffer nell'array specificato.

Parametri
dst l'array in cui devono essere scritti i valori
ritorna
  • questo buffer
Lancia
BufferUnderflowException se non ci sono abbastanza valori da copiare da questo buffer

public abstract DataBuffer <T> lettura (T[] dst, int offset, int length)

Leggere i riferimenti degli oggetti in questo buffer nell'array di destinazione.

Questo metodo trasferisce i valori da questo buffer nell'array di destinazione specificato. Se nel buffer sono presenti meno valori di quelli necessari per soddisfare la richiesta, ovvero se length > size() , non viene trasferito alcun valore e viene generata un'eccezione BufferUnderflowException.

Altrimenti, questo metodo copia n = length da questo buffer nell'array specificato a partire dall'offset specificato.

Parametri
dst l'array in cui devono essere scritti i valori
compensare l'offset all'interno dell'array del primo valore da scrivere; deve essere non negativo e non maggiore di dst.length
lunghezza il numero massimo di valori da scrivere nell'array specificato; deve essere non negativo e non maggiore di dst.length - offset
ritorna
  • questo buffer
Lancia
BufferUnderflowException se in questo buffer rimangono meno valori di lunghezza
IndexOutOfBoundsException se le precondizioni sui parametri offset e lunghezza non valgono

public abstract DataBuffer <T> setObject (valore T, indice lungo)

Scrive il valore dato in questo buffer in corrispondenza dell'indice dato. Importante: l'utilizzo di questo metodo deve essere limitato ai buffer di tipi non primitivi o quando il tipo di dati non è conosciuto in modo deterministico dal chiamante. In ogni altro caso, preferisci l'utilizzo della sua variante primitiva che migliorerà significativamente le prestazioni (ad esempio IntDataBuffer.setInt(idx)

Parametri
valore il valore da scrivere
indice l'indice in cui verrà scritto il valore
ritorna
  • questo buffer
Lancia
IndexOutOfBoundsException se l'indice è negativo o non inferiore alla dimensione del buffer
ReadOnlyBufferException se questo buffer è di sola lettura

abstract pubblico di dimensione lunga ()

Dimensione del buffer, in elementi.

Ad esempio, nel caso di un buffer di byte, questo valore è uguale al numero di byte che questo buffer può contenere. Per un buffer intero, è uguale al numero di numeri interi, pertanto la dimensione in byte di questo buffer è size() * Integer.BYTES .

ritorna
  • la dimensione del buffer

porzione astratta pubblica DataBuffer <T> (indice lungo, dimensione lunga)

Crea un nuovo buffer il cui contenuto è una sottosequenza condivisa del contenuto di questo buffer, a partire dall'indice e dalla dimensione specificati.

L'indice più la nuova dimensione non devono essere maggiori della dimensione del buffer. Le modifiche al contenuto di questo buffer saranno visibili nel nuovo buffer e viceversa. Il nuovo buffer sarà di sola lettura se, e solo se, questo buffer è di sola lettura.

Parametri
indice indice del primo valore del nuovo buffer creato
misurare la dimensione di questo nuovo buffer non deve essere maggiore di size()
ritorna
  • il nuovo tampone
Lancia
IllegalArgumentException se il valore della dimensione non supera i controlli di convalida

estratto pubblico DataBufferWindow <? estende la finestra DataBuffer <T>> (dimensione lunga)

Crea un DataBufferWindow che fornisce una visualizzazione parziale di questo buffer.

La finestra creata ha una dimensione fissa e può "slide" lungo questo buffer per fornire diverse visualizzazioni dei dati senza allocare una nuova istanza del buffer, come fa offset(long) . Ciò migliora le prestazioni generali quando questa operazione viene ripetuta frequentemente. Ad esempio:

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;
     
 }
 }

L'oggetto restituito è con stato e non è thread-safe.

Parametri
misurare dimensione della finestra
ritorna
  • una nuova finestra che inizia dall'indice 0 di questo buffer
Lancia
Eccezione operazione non supportata se questo tipo di buffer non supporta le finestre di buffer

public abstract DataBuffer <T> scrivi (T[] src)

Scrivi i riferimenti degli oggetti nell'array di origine in questo buffer.

Questo metodo trasferisce i valori nell'array di origine specificato in questo buffer. Se sono presenti più valori nell'array di origine che in questo buffer, ovvero se src.length > size() , non viene trasferito alcun valore e viene generata un'eccezione BufferOverflowException.

Altrimenti, questo metodo copia i valori n = src.length dall'array specificato.

Parametri
src l'array di origine da cui leggere i valori
ritorna
  • questo buffer
Lancia
BufferOverflowException se lo spazio in questo buffer non è sufficiente per i valori nell'array di origine
ReadOnlyBufferException se questo buffer è di sola lettura

public abstract DataBuffer <T> scrittura (T[] src, int offset, int length)

Metodo di immissione in blocco, utilizzando array int.

Questo metodo trasferisce i valori nell'array di origine specificato in questo buffer. Se sono presenti più valori nell'array di origine che in questo buffer, ovvero se length > size() , non viene trasferito alcun valore e viene generata un'eccezione BufferOverflowException.

Altrimenti, questo metodo copia n = length dall'array specificato in questo buffer, a partire dall'offset specificato.

Parametri
src l'array di origine da cui leggere i valori
compensare l'offset all'interno dell'array del primo valore da leggere; deve essere non negativo e non maggiore di src.length
lunghezza il numero di valori da leggere dall'array specificato; deve essere non negativo e non maggiore di src.length - offset
ritorna
  • questo buffer
Lancia
BufferOverflowException se lo spazio in questo buffer non è sufficiente per i valori nell'array di origine
IndexOutOfBoundsException se le precondizioni sui parametri offset e lunghezza non valgono
ReadOnlyBufferException se questo buffer è di sola lettura