DataLayout

общедоступный интерфейс DataLayout
Известные косвенные подклассы

Преобразует данные, хранящиеся в буфере, в заданный тип.

Экземпляры DataLayout используются для определения пользовательского формата хранения и чтения данных DataBuffer . Они обеспечивают уровень разделения между типом данных, хранящихся в буфере (тип буфера ), и типом данных, которыми манипулирует конечный пользователь (тип пользователя ).

Поскольку методы преобразования вызываются для каждого записанного или прочитанного значения, работа с макетами данных может отрицательно повлиять на производительность, поэтому, когда это возможно, следует отдавать предпочтение непосредственному использованию примитивных типов.

Также рекомендуется реализовать неизменяемые макеты данных, чтобы их можно было повторно применять к нескольким буферам без перераспределения нового экземпляра для каждого из них. Например:

 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));
         }
     };
 }
 

Публичные методы

абстрактный буфер данных <T>
applyTo (буфер S)
Примените этот макет к предоставленному буферу.
абстрактная Т
readObject (буфер S, длинный индекс)
Считывает значения n = scale() из буфера по заданному индексу и возвращает их как одно значение пользовательского типа.
абстрактный int
шкала ()
Указывает количество значений буфера, необходимое для представления одного пользовательского значения, по умолчанию — 1.
абстрактная пустота
writeObject (буфер S, значение T, длинный индекс)
Записывает пользовательское значение в буфер по заданному индексу после преобразования его в тип буфера.

Публичные методы

общедоступный абстрактный DataBuffer <T> applyTo (буфер S)

Примените этот макет к предоставленному буферу.

Возвращенный экземпляр DataBuffer является просто оболочкой исходного буфера и не имеет собственного резервного хранилища.

Параметры
буфер целевой буфер для применения этого макета
Возврат
  • буфер с этим макетом

общедоступный абстрактный T readObject (буфер S, длинный индекс)

Считывает значения n = scale() из буфера по заданному индексу и возвращает их как одно значение пользовательского типа.

Разработчики этого интерфейса несут ответственность за чтение значения, подлежащего преобразованию, из данного буфера, используя наиболее подходящий метод. Например, для макета, который преобразует одиночное значение long в BigInteger ,

 @Override
 public BigInteger readObject(LongDataBuffer buffer, long index) {
   return BigInteger.valueOf(buffer.getLong(index));
 }
 
Если одно пользовательское значение масштабируется более чем на одно значение буфера, index указывает начальную позицию последовательности, которая будет считана из буфера.

Параметры
буфер буфер для чтения из
индекс позиция буфера для чтения в буфере
Возврат
  • конвертированное значение

общедоступная абстрактная int шкала ()

Указывает количество значений буфера, необходимое для представления одного пользовательского значения, по умолчанию — 1.

Масштаб должен быть положительным и целым числом. Это означает, что одно значение буфера в буфере не может использоваться для представления более чем одного пользовательского значения.

общедоступный абстрактный void writeObject (буфер S, значение T, длинный индекс)

Записывает пользовательское значение в буфер по заданному индексу после преобразования его в тип буфера.

Разработчики этого интерфейса несут ответственность за запись преобразованного значения в данный буфер до возврата этого вызова, используя наиболее подходящий метод. Например, для макета, преобразующего BigInteger в один long ,

 @Override
 public void writeObject(LongDataBuffer buffer, BigInteger value, long index) {
   buffer.setLong(value.longValue(), index);
 }
 
Если одно пользовательское значение масштабируется более чем на одно значение буфера, index указывает начальную позицию последовательности, которая будет записана в буфер.

Параметры
буфер буфер для записи
ценить значение в пользовательском типе для преобразования и записи
индекс индекс в буфере, куда должно быть записано преобразованное значение