Znane podklasy pośrednie |
Kontener danych określonego typu.
Instancje DataBuffer
mapują natywne segmenty pamięci lub sterty do widoku liniowego, który obsługuje:
- Indeksowanie 64-bitowe, umożliwiające pracę z buforem większym niż 2 31 bajtów
- Przechowywanie obiektów dowolnego typu i nie tylko prymitywnych
- Typy ogólne umożliwiają także bezpośrednią pracę z typami pudełkowymi, co nie wymaga jawnych typów buforów, jak w przypadku standardowych buforów JDK.
DataBuffer
jest liniowa, szczególnie w przypadku typów nieprymitywnych lub dużych buforów. Metody publiczne
streszczenie <R> R | |
abstrakcyjny Bufor Danych <T> | copyTo ( DataBuffer <T> dst, długi rozmiar) Zapisz odniesienia do obiektów w tablicy źródłowej w tym buforze. |
abstrakcyjna wartość logiczna | równa się (obiekt obiektu) Sprawdza równość pomiędzy buforami danych. |
streszczenie T | getObject (długi indeks) Odczytuje wartość o podanym indeksie. |
abstrakcyjna wartość logiczna | jest tylko do odczytu () Informuje, czy ten bufor jest wspierany przez dostępną tablicę. |
abstrakcyjny Bufor Danych <T> | wąski (długi rozmiar) Tworzy nowy bufor, którego zawartość jest współdzielonym podciągiem zawartości tego bufora, którego rozmiar jest ustawiony na podaną wartość. |
abstrakcyjny Bufor Danych <T> | przesunięcie (długi indeks) Tworzy nowy bufor, którego zawartość jest współdzielonym podciągiem zawartości tego bufora, zaczynając od podanego indeksu. |
abstrakcyjny Bufor Danych <T> | czytaj (T[] dst) Przeczytaj referencje obiektów w tym buforze do tablicy docelowej. |
abstrakcyjny Bufor Danych <T> | odczyt (T[] dst, int przesunięcie, int długość) Przeczytaj referencje obiektów w tym buforze do tablicy docelowej. |
abstrakcyjny Bufor Danych <T> | setObject (wartość T, długi indeks) Zapisuje podaną wartość do tego bufora pod podanym indeksem. |
streszczenie długie | rozmiar () Rozmiar bufora w elementach. |
abstrakcyjny Bufor Danych <T> | plasterek (długi indeks, długi rozmiar) Tworzy nowy bufor, którego zawartość jest współdzielonym podciągiem zawartości tego bufora, zaczynając od podanego indeksu i o podanym rozmiarze. |
streszczenie DataBufferWindow <? rozszerza DataBuffer <T>> | okno (długie) Tworzy DataBufferWindow , który zapewnia częściowy widok tego buforu. |
abstrakcyjny Bufor Danych <T> | napisz (T[] src) Zapisz odniesienia do obiektów w tablicy źródłowej w tym buforze. |
abstrakcyjny Bufor Danych <T> | zapis (T[] src, int przesunięcie, int długość) Metoda umieszczania zbiorczego przy użyciu tablic typu int. |
Metody publiczne
publiczne streszczenie R zaakceptuj ( DataStorageVisitor <R> gość)
Odwiedza pamięć zapasową tego bufora.
Implementacja bufora odpowiada za przekazanie odwiedzającemu odniesienia do faktycznego przechowywania danych. Odwiedzający nie musi obsługiwać wszystkich możliwych typów przechowywania danych i może zastąpić tylko metody przechowywania, którymi faktycznie jest zainteresowany. W przypadku każdego innego typu przechowywania to wywołanie powróci do fallback()
, więc odwiedzający będzie mógł wykonać jakąś ogólną procedurę, jeśli wymagany.
Parametry
gość | odwiedza magazyn danych tego bufora |
---|
Powroty
- tę samą wartość zwróconą przez odwiedzającego
publiczny streszczenie DataBuffer <T> copyTo ( DataBuffer <T> dst, długi rozmiar)
Zapisz odniesienia do obiektów w tablicy źródłowej w tym buforze.
Jeśli jest więcej wartości do skopiowania niż rozmiar bufora docelowego, tj. size > dst.size()
, wówczas żadne wartości nie są przesyłane i zgłaszany jest wyjątek BufferOverflowException. Z drugiej strony, jeśli istnieje więcej wartości do skopiowania niż rozmiar bufora źródłowego, tj. > src.size()
, zgłaszany jest wyjątek BufferUnderfloatException.
W przeciwnym razie ta metoda kopiuje wartości n = size
z tego bufora do bufora docelowego.
Parametry
dst | bufor docelowy, do którego kopiowane są wartości; nie może być tym buforem |
---|---|
rozmiar | liczba wartości do skopiowania do bufora docelowego |
Powroty
- ten bufor
Rzuca
Wyjątek IllegalArgument | jeśli buforem docelowym jest ten bufor |
---|---|
Wyjątek ReadOnlyBufferException | jeśli bufor docelowy jest tylko do odczytu |
Wyjątek BufferOverflow | jeśli w buforze docelowym nie ma wystarczającej ilości miejsca |
Wyjątek BufferUnderflow | jeśli w buforze źródłowym nie ma wystarczającej liczby wartości |
publiczna wartość logiczna abstrakcyjna równa się (obiekt obiektu)
Sprawdza równość pomiędzy buforami danych.
Bufor danych jest równy innemu obiektowi, jeśli ten obiekt jest innym DataBuffer
tego samego rozmiaru, typu, a elementy są równe i w tej samej kolejności. Na przykład:
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
Należy zauważyć, że obliczenia wymagane do sprawdzenia równości między dwoma buforami mogą być w niektórych przypadkach kosztowne, dlatego też nie zaleca się stosowania tej metody w ścieżce krytycznej, w której liczy się wydajność.
Parametry
obj | obiekt, z którym chcesz porównać ten bufor |
---|
Powroty
- true, jeśli ten bufor jest równy podanemu obiektowi
publiczne streszczenie T getObject (długi indeks)
Odczytuje wartość o podanym indeksie. Ważne: użycie tej metody powinno być ograniczone do buforów typów innych niż pierwotne lub gdy typ danych nie jest deterministycznie znany wywołującemu. W każdym innym przypadku preferuj użycie jego prymitywnego wariantu, który znacznie poprawi wydajność (np. IntDataBuffer.getInt(idx)
Parametry
indeks | indeks, z którego będzie odczytywany float |
---|
Powroty
- wartość przy danym indeksie
Rzuca
Wyjątek IndexOutOfBounds | jeśli indeks jest ujemny lub nie mniejszy niż rozmiar bufora |
---|
publiczna wartość logiczna abstrakcyjna isReadOnly ()
Informuje, czy ten bufor jest wspierany przez dostępną tablicę.
Powroty
- true wtedy i tylko wtedy, gdy ten bufor jest tylko do odczytu
publiczny streszczenie DataBuffer <T> wąski (długi rozmiar)
Tworzy nowy bufor, którego zawartość jest współdzielonym podciągiem zawartości tego bufora, którego rozmiar jest ustawiony na podaną wartość.
Nowy rozmiar nie może być większy niż rozmiar bufora. Zmiany w zawartości tego bufora będą widoczne w nowym buforze i odwrotnie. Nowy bufor będzie tylko do odczytu wtedy i tylko wtedy, gdy ten bufor będzie tylko do odczytu.
To wywołanie jest równoważne slice(0, size)
Parametry
rozmiar | rozmiar tego nowego bufora |
---|
Powroty
- nowy bufor
Rzuca
Wyjątek IllegalArgument | jeśli wartości indeksu i/lub rozmiaru nie przejdą kontroli poprawności |
---|
publiczna abstrakcja DataBuffer <T> offset (długi indeks)
Tworzy nowy bufor, którego zawartość jest współdzielonym podciągiem zawartości tego bufora, zaczynając od podanego indeksu.
Indeks nie może być większy niż rozmiar bufora. Zmiany w zawartości tego bufora będą widoczne w nowym buforze i odwrotnie. Nowy bufor będzie tylko do odczytu wtedy i tylko wtedy, gdy ten bufor będzie tylko do odczytu.
To wywołanie jest równoważne z slice(index, size() - index)
Parametry
indeks | indeks pierwszej wartości nowo utworzonego bufora nie może być większy niż size() |
---|
Powroty
- nowy bufor
Rzuca
Wyjątek IllegalArgument | jeśli indeks nie przejdzie kontroli poprawności |
---|
publiczny streszczenie DataBuffer <T> odczyt (T[] dst)
Przeczytaj referencje obiektów w tym buforze do tablicy docelowej.
Ta metoda przenosi wartości z tego bufora do podanej tablicy docelowej. Jeśli w buforze znajduje się mniej wartości, niż jest to wymagane do zaspokojenia żądania, to znaczy, jeśli dst.length > size()
, wówczas żadne wartości nie są przesyłane i zgłaszany jest wyjątek BufferUnderflowException.
W przeciwnym razie ta metoda kopiuje wartości n = dst.length
z tego bufora do podanej tablicy.
Parametry
dst | tablica, do której mają zostać zapisane wartości |
---|
Powroty
- ten bufor
Rzuca
Wyjątek BufferUnderflow | jeśli nie ma wystarczającej liczby wartości do skopiowania z tego bufora |
---|
publiczny streszczenie DataBuffer <T> odczyt (T[] dst, int przesunięcie, int długość)
Przeczytaj referencje obiektów w tym buforze do tablicy docelowej.
Ta metoda przenosi wartości z tego bufora do podanej tablicy docelowej. Jeśli w buforze znajduje się mniej wartości, niż jest to wymagane do zaspokojenia żądania, to znaczy, jeśli length > size()
, wówczas nie są przesyłane żadne wartości i zgłaszany jest wyjątek BufferUnderflowException.
W przeciwnym razie ta metoda kopiuje wartości n = length
z tego bufora do danej tablicy, zaczynając od danego przesunięcia.
Parametry
dst | tablica, do której mają zostać zapisane wartości |
---|---|
zrównoważyć | przesunięcie w tablicy pierwszej wartości do zapisania; musi być nieujemna i nie większa niż dst.length |
długość | maksymalna liczba wartości do zapisania do danej tablicy; musi być nieujemna i nie większa niż dst.length - offset |
Powroty
- ten bufor
Rzuca
Wyjątek BufferUnderflow | jeśli w tym buforze pozostało mniej niż długość wartości |
---|---|
Wyjątek IndexOutOfBounds | jeśli warunki wstępne dotyczące parametrów przesunięcia i długości nie są spełnione |
publiczny streszczenie DataBuffer <T> setObject (wartość T, długi indeks)
Zapisuje podaną wartość do tego bufora pod podanym indeksem. Ważne: użycie tej metody powinno być ograniczone do buforów typów innych niż pierwotne lub gdy typ danych nie jest deterministycznie znany wywołującemu. W każdym innym przypadku preferuj użycie jego pierwotnego wariantu, który znacznie poprawi wydajność (np. IntDataBuffer.setInt(idx)
Parametry
wartość | wartość do zapisania |
---|---|
indeks | indeks, pod którym wartość zostanie zapisana |
Powroty
- ten bufor
Rzuca
Wyjątek IndexOutOfBounds | jeśli indeks jest ujemny lub nie mniejszy niż rozmiar bufora |
---|---|
Wyjątek ReadOnlyBufferException | jeśli ten bufor jest tylko do odczytu |
publiczny streszczenie długi rozmiar ()
Rozmiar bufora w elementach.
Na przykład w przypadku bufora bajtowego wartość ta jest równa liczbie bajtów, które ten bufor może pomieścić. W przypadku bufora liczb całkowitych jest on równy liczbie liczb całkowitych, dlatego rozmiar tego bufora w bajtach wynosi size() * Integer.BYTES
.
Powroty
- rozmiar bufora
publiczny streszczenie DataBuffer <T> kawałek (długi indeks, duży rozmiar)
Tworzy nowy bufor, którego zawartość jest współdzielonym podciągiem zawartości tego bufora, zaczynając od podanego indeksu i o podanym rozmiarze.
Indeks plus nowy rozmiar nie może być większy niż rozmiar bufora. Zmiany w zawartości tego bufora będą widoczne w nowym buforze i odwrotnie. Nowy bufor będzie tylko do odczytu wtedy i tylko wtedy, gdy ten bufor będzie tylko do odczytu.
Parametry
indeks | indeks pierwszej wartości utworzonego nowego bufora |
---|---|
rozmiar | rozmiar tego nowego bufora nie może być większy niż size() |
Powroty
- nowy bufor
Rzuca
Wyjątek IllegalArgument | jeśli wartość rozmiaru nie przejdzie kontroli poprawności |
---|
publiczne streszczenie DataBufferWindow <? rozszerza okno DataBuffer <T>> (długi rozmiar)
Tworzy DataBufferWindow
, który zapewnia częściowy widok tego buforu.
Utworzone okno ma stały rozmiar i może "slide"
wzdłuż tego 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;
}
}
Zwrócony obiekt jest stanowy i nie jest bezpieczny dla wątków.
Parametry
rozmiar | wielkość okna |
---|
Powroty
- nowe okno rozpoczynające się od indeksu 0 tego bufora
Rzuca
Nieobsługiwany wyjątek operacji | jeśli ten typ bufora nie obsługuje okien buforowych |
---|
publiczny streszczenie DataBuffer <T> zapis (T[] src)
Zapisz odniesienia do obiektów w tablicy źródłowej w tym buforze.
Ta metoda przenosi wartości z danej tablicy źródłowej do tego bufora. Jeśli w tablicy źródłowej znajduje się więcej wartości niż w tym buforze, to znaczy, jeśli src.length > size()
, wówczas żadne wartości nie są przesyłane i zgłaszany jest wyjątek BufferOverflowException.
W przeciwnym razie ta metoda kopiuje wartości n = src.length
z podanej tablicy.
Parametry
źródło | tablica źródłowa, z której mają zostać odczytane wartości |
---|
Powroty
- ten bufor
Rzuca
Wyjątek BufferOverflow | jeśli w tym buforze nie ma wystarczającej ilości miejsca na wartości w tablicy źródłowej |
---|---|
Wyjątek ReadOnlyBufferException | jeśli ten bufor jest tylko do odczytu |
publiczny streszczenie DataBuffer <T> zapis (T[] src, int przesunięcie, int długość)
Metoda umieszczania zbiorczego przy użyciu tablic typu int.
Ta metoda przenosi wartości z danej tablicy źródłowej do tego bufora. Jeśli w tablicy źródłowej znajduje się więcej wartości niż w tym buforze, to znaczy, jeśli length > size()
, wówczas nie są przesyłane żadne wartości i zgłaszany jest wyjątek BufferOverflowException.
W przeciwnym razie ta metoda kopiuje wartości n = length
z podanej tablicy do tego bufora, zaczynając od danego przesunięcia.
Parametry
źródło | tablica źródłowa, z której mają zostać odczytane wartości |
---|---|
zrównoważyć | przesunięcie w tablicy pierwszej wartości do odczytania; musi być nieujemna i nie większa niż src.length |
długość | liczba wartości do odczytania z danej tablicy; musi być nieujemna i nie większa niż src.length - offset |
Powroty
- ten bufor
Rzuca
Wyjątek BufferOverflow | jeśli w tym buforze nie ma wystarczającej ilości miejsca na wartości w tablicy źródłowej |
---|---|
Wyjątek IndexOutOfBounds | jeśli warunki wstępne dotyczące parametrów przesunięcia i długości nie są spełnione |
Wyjątek ReadOnlyBufferException | jeśli ten bufor jest tylko do odczytu |