Известные косвенные подклассы Bfloat16Layout , BoolLayout , BooleanDataLayout <S расширяет DataBuffer <?>>, ByteDataLayout <S расширяет DataBuffer <?>>, DoubleDataLayout <S расширяет DataBuffer <?>>, Float16Layout , FloatDataLayout <S расширяет DataBuffer <?>>, IntDataLayout <S расширяет DataBuffer <?>>, LongDataLayout <S расширяет DataBuffer <?>>, ShortDataLayout <S расширяет DataBuffer <?>>, StringLayout |
Преобразует данные, хранящиеся в буфере, в заданный тип.
Экземпляры 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() из буфера по заданному индексу и возвращает их как одно значение пользовательского типа. |
абстрактный интервал | шкала () Указывает количество значений буфера, необходимое для представления одного пользовательского значения, по умолчанию — 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
указывает начальную позицию последовательности, которая будет записана в буфер. Параметры
буфер | буфер для записи |
---|---|
ценить | значение в пользовательском типе для преобразования и записи |
индекс | индекс в буфере, куда должно быть записано преобразованное значение |