DataBufferWindow

interfejs publiczny DataBufferWindow
Znane podklasy pośrednie

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.
abstrakcyjne, długie
zrównoważyć ()
Zwraca bieżące przesunięcie tego okna w oryginalnym buforze.
abstrakcyjne, 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());
 

Zwroty
  • 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
Zwroty
  • 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
Zwroty
  • ten przypadek
Rzuca
Wyjątek IndexOutOfBounds jeśli okna nie można przesunąć, ponieważ wykracza poza pierwotne limity bufora