Znane podklasy pośrednie AbstractDataBufferWindow <B rozszerza DataBuffer <?>> |
Zmienny kontener do przeglądania części DataBuffer
.
Okna buforów danych mają stały rozmiar i mogą "slide"
wzdłuż bufora, aby zapewnić różne widoki danych bez przydzielania nowej instancji bufora, tak jak robi to offset(long)
. Poprawia to ogólną wydajność, gdy ta operacja jest często powtarzana. Na przykład:
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;
}
}
Instancje DataBufferWindow
są stanowe i nie są bezpieczne dla wątków.
Metody publiczne
streszczenie B | bufor () Zwraca bufor obsługujący to okno. |
streszczenie długie | zrównoważyć () Zwraca bieżące przesunięcie tego okna w oryginalnym buforze. |
streszczenie długie | rozmiar () Zwraca rozmiar tego okna bufora. |
abstrakcyjne okno bufora danych <B> | zjeżdżalnia (długi krok) Przesuwa okno elementów step w oryginalnym buforze. |
abstrakcyjne okno bufora danych <B> | slideTo (długi indeks) Przesuwa okno w podane miejsce w oryginalnym buforze. |
Metody publiczne
publiczny bufor abstrakcyjny B ()
Zwraca bufor obsługujący to okno.
Każda instancja okna ma swój własny bufor zapewniający widok na oryginalny DataBuffer
. Bufory są mutowane, gdy okno przesuwa się do różnych przesunięć. Na przykład:
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());
Powroty
- bufor tego okna
publiczne streszczenie długie przesunięcie ()
Zwraca bieżące przesunięcie tego okna w oryginalnym buforze.
publiczny streszczenie długi rozmiar ()
Zwraca rozmiar tego okna bufora.
publiczny streszczenie DataBufferWindow <B> slajd (długi krok)
Przesuwa okno elementów step
w oryginalnym buforze.
Rozmiar okna pozostaje taki sam, a jego przesunięcie jest ustawione na offset() + step
. Jeśli step
jest dodatni, okno przesunie się do przodu. Jeśli będzie ujemna, będzie się cofać.
Parametry
krok | wartość, która ma zostać dodana do bieżącego przesunięcia tego okna |
---|
Powroty
- ten przypadek
Rzuca
Wyjątek IndexOutOfBounds | jeśli okna nie można przesunąć, ponieważ wykracza poza pierwotne limity bufora |
---|
publiczne streszczenie DataBufferWindow <B> slideTo (długi indeks)
Przesuwa okno w podane miejsce w oryginalnym buforze.
Rozmiar okna pozostaje taki sam, a jego przesunięcie jest ustawione na index
, tak że dostęp do wartości buffer()
w indeksie x
zwróci wartość w index + x
w oryginalnym buforze.
Parametry
indeks | nowe przesunięcie dla tego okna |
---|
Powroty
- ten przypadek
Rzuca
Wyjątek IndexOutOfBounds | jeśli okna nie można przesunąć, ponieważ wykracza poza pierwotne limity bufora |
---|