DataLayout

interfejs publiczny DataLayout
Znane podklasy pośrednie

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));
 }
 
Jeśli pojedyncza wartość użytkownika skaluje się na więcej niż jednej wartości bufora, 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);
 }
 
Jeśli pojedyncza wartość użytkownika skaluje się na więcej niż jednej wartości bufora, 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ść