Znane podklasy pośrednie Bfloat16Layout , BoolLayout , BooleanDataLayout <S rozszerza DataBuffer <?>>, ByteDataLayout <S rozszerza DataBuffer <?>>, DoubleDataLayout <S rozszerza DataBuffer <?>>, Float16Layout , FloatDataLayout <S rozszerza DataBuffer <?>>, IntDataLayout <S rozszerza DataBuffer <?>>, LongDataLayout <S rozszerza DataBuffer <?>>, ShortDataLayout <S rozszerza DataBuffer <?>>, StringLayout |
Konwertuje dane przechowywane w buforze na dany typ.
Instancje DataLayout
służą do definiowania niestandardowego formatu przechowywania i odczytu danych DataBuffer
. Zapewniają warstwę segregacji pomiędzy typem danych przechowywanych w buforze (typ bufora ) a rodzajem danych, którymi manipuluje użytkownik końcowy (typ użytkownika ).
Ponieważ metody konwersji są wywoływane dla każdej zapisywanej lub odczytywanej wartości, praca z układami danych może mieć negatywny wpływ na wydajność, dlatego jeśli to możliwe, należy preferować bezpośrednie używanie typów pierwotnych.
Zalecane jest również wdrożenie niezmiennych układów danych, aby można było je ponownie zastosować do wielu buforów bez ponownego przydzielania nowej instancji dla każdego z nich. Na przykład:
class BigIntegerBufferAllocator { public DataBuffer<BigInteger> allocate(long size) { return LAYOUT.applyTo(DataBuffers.ofLongs(size * LAYOUT.scale())); // scale is 1 by default } private static final DataLayout<LongDataBuffer, BigInteger> LAYOUT = new DataLayout<LongDataBuffer, BigInteger>() { @Override public void writeObject(LongDataBuffer buffer, BigInteger value, long index) { buffer.setLong(value.longValue(), index); } @Override public BigInteger readObject(LongDataBuffer buffer, long index) { return BigInteger.valueOf(buffer.getLong(index)); } }; }
Metody publiczne
abstrakcyjny Bufor Danych <T> | ApplyTo (bufor S) Zastosuj ten układ do dostarczonego bufora. |
streszczenie T | readObject (bufor S, długi indeks) Odczytuje wartości n = scale() z bufora o podanym indeksie i zwraca je jako pojedynczą wartość w typie użytkownika. |
streszczenie wew | skala () Wskazuje liczbę wartości buforów wymaganych do reprezentowania pojedynczej wartości użytkownika. Wartość domyślna to 1. |
abstrakcyjna pustka | writeObject (bufor S, wartość T, długi indeks) Zapisuje wartość użytkownika do bufora pod danym indeksem po przekonwertowaniu jej na typ bufora. |
Metody publiczne
publiczny streszczenie DataBuffer <T> ApplyTo (bufor S)
Zastosuj ten układ do dostarczonego bufora.
Zwrócona instancja DataBuffer
jest po prostu opakowaniem oryginalnego bufora i nie posiada własnej pamięci zapasowej.
Parametry
bufor | bufor docelowy, do którego ma zostać zastosowany ten układ |
---|
Powroty
- bufor z tym układem
publiczny streszczenie T readObject (bufor S, długi indeks)
Odczytuje wartości n = scale()
z bufora o podanym indeksie i zwraca je jako pojedynczą wartość w typie użytkownika.
Obowiązkiem implementatorów tego interfejsu jest odczytanie z danego bufora wartości, która ma zostać przekonwertowana, przy użyciu najwłaściwszej metody. Na przykład w przypadku układu konwertującego pojedynczy long
na BigInteger
,
@Override public BigInteger readObject(LongDataBuffer buffer, long index) { return BigInteger.valueOf(buffer.getLong(index)); }
index
wskazuje pozycję początkową sekwencji, która ma zostać odczytana z bufora. Parametry
bufor | bufor, z którego ma zostać odczytany |
---|---|
indeks | pozycja bufora do odczytania w buforze |
Powroty
- przeliczona wartość
publiczne streszczenie in skala ()
Wskazuje liczbę wartości buforów wymaganych do reprezentowania pojedynczej wartości użytkownika. Wartość domyślna to 1.
Skala musi być dodatnia i musi być liczbą całkowitą, co oznacza, że pojedyncza wartość bufora w buforze nie może być używana do reprezentowania więcej niż jednej wartości użytkownika.
public streszczenie void writeObject (bufor S, wartość T, długi indeks)
Zapisuje wartość użytkownika do bufora pod danym indeksem po przekonwertowaniu jej na typ bufora.
Obowiązkiem implementatorów tego interfejsu jest zapisanie przekonwertowanej wartości do danego bufora przed zwróceniem tego wywołania, przy użyciu najbardziej odpowiedniej metody. Na przykład w przypadku układu konwertującego BigInteger
na pojedynczy long
,
@Override public void writeObject(LongDataBuffer buffer, BigInteger value, long index) { buffer.setLong(value.longValue(), index); }
index
wskazuje pozycję początkową sekwencji, która ma zostać zapisana w buforze. Parametry
bufor | bufor, do którego należy pisać |
---|---|
wartość | wartość w typie użytkownika do konwersji i zapisu |
indeks | indeks w buforze, w którym powinna zostać zapisana przekonwertowana wartość |