DataBufferWindow

interfaccia pubblica DataBufferWindow
Sottoclassi indirette conosciute

Un contenitore modificabile per visualizzare parte di un DataBuffer .

Le finestre del buffer di dati hanno una dimensione fissa e possono "slide" lungo un 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;
     
 }
 }

Le istanze DataBufferWindow sono stateful e non thread-safe.

Metodi pubblici

astratto B
respingente ()
Restituisce il buffer che supporta questa finestra.
astratto lungo
compensare ()
Restituisce l'offset corrente di questa finestra nel buffer originale.
astratto lungo
misurare ()
Restituisce la dimensione di questa finestra del buffer.
abstract DataBufferWindow <B>
scivolare (passo lungo)
Sposta la finestra degli elementi step nel buffer originale.
abstract DataBufferWindow <B>
slideTo (indice lungo)
Sposta la finestra nella posizione specificata nel buffer originale.

Metodi pubblici

buffer B astratto pubblico ()

Restituisce il buffer che supporta questa finestra.

Ogni istanza della finestra ha il proprio buffer che fornisce una vista sul DataBuffer originale. I buffer vengono modificati quando la finestra scorre su offset diversi. Ad esempio:

IntDataBuffer buffer = DataBuffers.of(0, 1, 2, 3);
 DataBufferWindow<IntDataBuffer> window = buffer.window(0, 2);

 IntDataBuffer windowBuffer = window.buffer();
 assertEquals(0, windowBuffer.getInt(0));
 assertEquals(1, windowBuffer.getInt(1));

 window.slideTo(2);
 assertEquals(2, windowBuffer.getInt(0));
 assertEquals(3, windowBuffer.getInt(1));
 assertSame(windowBuffer, window.buffer());
 

ritorna
  • buffer di questa finestra

offset lungo astratto pubblico ()

Restituisce l'offset corrente di questa finestra nel buffer originale.

abstract pubblico di dimensione lunga ()

Restituisce la dimensione di questa finestra del buffer.

public abstract DataBufferWindow <B> diapositiva (passaggio lungo)

Sposta la finestra degli elementi step nel buffer originale.

La dimensione della finestra rimane la stessa e il suo offset è impostato su offset() + step . Se step è positivo, la finestra scorrerà in avanti. Se è negativo, scivolerà all'indietro.

Parametri
fare un passo valore da aggiungere all'offset corrente di questa finestra
ritorna
  • questa istanza
Lancia
IndexOutOfBoundsException se la finestra non può essere spostata perché supera i limiti del buffer originale

public abstract DataBufferWindow <B> slideTo (indice lungo)

Sposta la finestra nella posizione specificata nel buffer originale.

La dimensione della finestra rimane la stessa e il suo offset è impostato su index , in modo che l'accesso al valore di buffer() all'indice x restituirà il valore index + x nel buffer originale.

Parametri
indice nuovo offset per questa finestra
ritorna
  • questa istanza
Lancia
IndexOutOfBoundsException se la finestra non può essere spostata perché supera i limiti del buffer originale