Sottoclassi indirette conosciute AbstractDataBufferWindow <B estende DataBuffer <?>> |
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. Per 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. Per 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());
Ritorni
- 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 |
---|
Ritorni
- 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 |
---|
Ritorni
- questa istanza
Lancia
IndexOutOfBoundsException | se la finestra non può essere spostata perché supera i limiti del buffer originale |
---|