Известные косвенные подклассы |
Контейнер данных определенного типа.
Экземпляры DataBuffer
отображают сегменты собственной памяти или кучи в линейное представление, которое поддерживает:
- 64-битная индексация, позволяющая работать с буфером размером более 2 31 байт.
- Хранение объектов любых типов и не только примитивов
- Универсальные типы также позволяют напрямую работать с коробочными типами, что не требует явных типов буферов, как в случае со стандартными буферами JDK.
DataBuffer
, является линейной, особенно при работе с не примитивными типами или большими буферами. Публичные методы
абстрактный <R> R | |
абстрактный буфер данных <T> | copyTo ( DataBuffer <T> dst, длинный размер) Запишите ссылки на объекты исходного массива в этот буфер. |
абстрактное логическое значение | равно (Объект obj) Проверяет равенство между буферами данных. |
абстрактная Т | getObject (длинный индекс) Считывает значение по заданному индексу. |
абстрактное логическое значение | isReadOnly () Сообщает, поддерживается ли этот буфер доступным массивом. |
абстрактный буфер данных <T> | узкий (длинный размер) Создает новый буфер, содержимое которого является общей подпоследовательностью содержимого этого буфера, размер которого установлен на заданное значение. |
абстрактный буфер данных <T> | смещение (длинный индекс) Создает новый буфер, содержимое которого является общей подпоследовательностью содержимого этого буфера, начиная с заданного индекса. |
абстрактный буфер данных <T> | читать (T[] dst) Считайте ссылки на объекты в этом буфере в целевой массив. |
абстрактный буфер данных <T> | чтение (T[] dst, смещение целого числа, длина целого числа) Считайте ссылки на объекты в этом буфере в целевой массив. |
абстрактный буфер данных <T> | setObject (значение T, длинный индекс) Записывает заданное значение в этот буфер по заданному индексу. |
абстрактный длинный | размер () Размер буфера в элементах. |
абстрактный буфер данных <T> | срез (длинный индекс, длинный размер) Создает новый буфер, содержимое которого является общей подпоследовательностью содержимого этого буфера, начиная с заданного индекса и заданного размера. |
абстрактный DataBufferWindow <? расширяет DataBuffer <T>> | окно (длинный размер) Создает DataBufferWindow , который обеспечивает частичное представление этого буфера. |
абстрактный буфер данных <T> | написать (T[] источник) Запишите ссылки на объекты исходного массива в этот буфер. |
абстрактный буфер данных <T> | запись (T[] src, смещение целого числа, длина целого числа) Метод массового размещения с использованием массивов int. |
Публичные методы
общедоступный абстрактный R Accept (посетитель DataStorageVisitor <R>)
Посещает резервное хранилище этого буфера.
Реализация буфера отвечает за передачу ссылки на фактическое хранилище данных предоставленному посетителю. Посетителю не обязательно обрабатывать все возможные типы хранения данных, и он может переопределить только те методы хранения, которые ему действительно интересны. Для любого другого типа хранилища этот вызов откатится к fallback()
, чтобы посетитель мог выполнить некоторую общую процедуру, если нужный.
Параметры
посетитель | посещает хранилище данных этого буфера |
---|
Возврат
- то же значение, возвращенное посетителем
общедоступный абстрактный DataBuffer <T> copyTo ( DataBuffer <T> dst, длинный размер)
Запишите ссылки на объекты исходного массива в этот буфер.
Если значений для копирования больше, чем размер целевого буфера, т. е. size > dst.size()
, значения не передаются и выдается исключение BufferOverflowException. С другой стороны, если копируемых значений больше, чем размер исходного буфера, т. е. > src.size()
, то генерируется исключение BufferUnderfloatException.
В противном случае этот метод копирует значения n = size
из этого буфера в целевой буфер.
Параметры
летнее время | буфер назначения, в который копируются значения; не должно быть этого буфера |
---|---|
размер | количество значений для копирования в целевой буфер |
Возврат
- этот буфер
Броски
IllegalArgumentException | если буфер назначения является этим буфером |
---|---|
ReadOnlyBufferException | если целевой буфер доступен только для чтения |
исключение BufferOverflowException | если в буфере назначения недостаточно места |
BufferUnderflowException | если в исходном буфере недостаточно значений |
общедоступное абстрактное логическое значение равно (Object obj)
Проверяет равенство между буферами данных.
Буфер данных равен другому объекту, если этот объект является другим DataBuffer
того же размера, типа и элементы равны и находятся в том же порядке. Например:
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
Обратите внимание, что вычисления, необходимые для проверки равенства между двумя буферами, в некоторых случаях могут быть дорогостоящими, поэтому рекомендуется не использовать этот метод на критическом пути, где производительность имеет значение.
Параметры
объект | объект для сравнения этого буфера с |
---|
Возврат
- true, если этот буфер равен предоставленному объекту
общедоступный абстрактный T getObject (длинный индекс)
Считывает значение по заданному индексу. Важно: Использование этого метода должно быть ограничено буферами не примитивных типов или когда тип данных не детерминированно известен вызывающей стороне. В любом другом случае предпочтительнее использовать его примитивный вариант, который значительно улучшит производительность (например, IntDataBuffer.getInt(idx)
Параметры
индекс | индекс, из которого будет считываться число с плавающей запятой |
---|
Возврат
- значение по данному индексу
Броски
Индексаутофбаундсисключение | если индекс отрицательный или не меньше размера буфера |
---|
общедоступное абстрактное логическое значение isReadOnly ()
Сообщает, поддерживается ли этот буфер доступным массивом.
Возврат
- true тогда и только тогда, когда этот буфер доступен только для чтения
общедоступный абстрактный DataBuffer <T> узкий (длинный размер)
Создает новый буфер, содержимое которого является общей подпоследовательностью содержимого этого буфера, размер которого установлен на заданное значение.
Новый размер не должен превышать этот размер буфера. Изменения содержимого этого буфера будут видны в новом буфере и наоборот. Новый буфер будет доступен только для чтения тогда и только тогда, когда этот буфер доступен только для чтения.
Этот вызов эквивалентен slice(0, size)
Параметры
размер | размер этого нового буфера |
---|
Возврат
- новый буфер
Броски
IllegalArgumentException | если значения индекса и/или размера не проходят проверки проверки |
---|
общедоступное абстрактное смещение DataBuffer <T> (длинный индекс)
Создает новый буфер, содержимое которого является общей подпоследовательностью содержимого этого буфера, начиная с заданного индекса.
Индекс не должен быть больше этого размера буфера. Изменения содержимого этого буфера будут видны в новом буфере и наоборот. Новый буфер будет доступен только для чтения тогда и только тогда, когда этот буфер доступен только для чтения.
Этот вызов эквивалентен slice(index, size() - index)
Параметры
индекс | индекс первого значения созданного нового буфера не должен быть больше size() |
---|
Возврат
- новый буфер
Броски
IllegalArgumentException | если индекс не проходит проверки проверки |
---|
чтение общедоступного абстрактного DataBuffer <T> (T[] dst)
Считайте ссылки на объекты в этом буфере в целевой массив.
Этот метод передает значения из этого буфера в заданный массив назначения. Если в буфере меньше значений, чем требуется для удовлетворения запроса, то есть если dst.length > size()
, значения не передаются и создается исключение BufferUnderflowException.
В противном случае этот метод копирует значения n = dst.length
из этого буфера в заданный массив.
Параметры
летнее время | массив, в который должны быть записаны значения |
---|
Возврат
- этот буфер
Броски
BufferUnderflowException | если недостаточно значений для копирования из этого буфера |
---|
чтение общедоступного абстрактного DataBuffer <T> (T[] dst, смещение int, длина int)
Считайте ссылки на объекты в этом буфере в целевой массив.
Этот метод передает значения из этого буфера в заданный массив назначения. Если в буфере меньше значений, чем требуется для удовлетворения запроса, то есть если length > size()
, значения не передаются и создается исключение BufferUnderflowException.
В противном случае этот метод копирует значения n = length
из этого буфера в заданный массив, начиная с заданного смещения.
Параметры
летнее время | массив, в который должны быть записаны значения |
---|---|
компенсировать | смещение в массиве первого записываемого значения; должно быть неотрицательным и не превышать dst.length |
длина | максимальное количество значений, записываемых в данный массив; должно быть неотрицательным и не превышать dst.length - offset |
Возврат
- этот буфер
Броски
BufferUnderflowException | если в этом буфере осталось меньше значений длины |
---|---|
Индексаутофбаундсисключение | если предварительные условия для параметров смещения и длины не выполняются |
общедоступный абстрактный DataBuffer <T> setObject (значение T, длинный индекс)
Записывает заданное значение в этот буфер по заданному индексу. Важно: Использование этого метода должно быть ограничено буферами не примитивных типов или когда тип данных не детерминированно известен вызывающей стороне. В любом другом случае предпочтительнее использовать его примитивный вариант, который значительно улучшит производительность (например, IntDataBuffer.setInt(idx)
Параметры
ценить | значение, которое нужно записать |
---|---|
индекс | индекс, по которому будет записано значение |
Возврат
- этот буфер
Броски
Индексаутофбаундсисключение | если индекс отрицательный или не меньше размера буфера |
---|---|
ReadOnlyBufferException | если этот буфер доступен только для чтения |
публичный абстрактный длинный размер ()
Размер буфера в элементах.
Например, в случае байтового буфера это значение равно количеству байтов, которые может хранить этот буфер. Для целочисленного буфера оно равно количеству целых чисел, поэтому размер этого буфера в байтах равен size() * Integer.BYTES
.
Возврат
- размер буфера
общедоступный абстрактный фрагмент DataBuffer <T> (длинный индекс, длинный размер)
Создает новый буфер, содержимое которого является общей подпоследовательностью содержимого этого буфера, начиная с заданного индекса и заданного размера.
Индекс плюс новый размер не должен превышать этот размер буфера. Изменения содержимого этого буфера будут видны в новом буфере и наоборот. Новый буфер будет доступен только для чтения тогда и только тогда, когда этот буфер доступен только для чтения.
Параметры
индекс | индекс первого значения созданного нового буфера |
---|---|
размер | размер этого нового буфера не должен быть больше, чем size() |
Возврат
- новый буфер
Броски
IllegalArgumentException | если значение размера не проходит проверки проверки |
---|
общедоступный абстрактный DataBufferWindow <? расширяет окно DataBuffer <T>> (длинный размер)
Создает DataBufferWindow
, который обеспечивает частичное представление этого буфера.
Созданное окно имеет фиксированный размер и может "slide"
по этому буферу, обеспечивая различные представления данных без выделения нового экземпляра буфера, как это делает offset(long)
. Это повышает общую производительность при частом повторении этой операции. Например:
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;
}
}
Возвращенный объект имеет состояние и не является потокобезопасным.
Параметры
размер | размер окна |
---|
Возврат
- новое окно, которое начинается с индекса 0 этого буфера
Броски
УнподдерживаемоеОператионИсключение | если этот тип буфера не поддерживает буферные окна |
---|
публичный абстрактный DataBuffer <T> запись (T[] src)
Запишите ссылки на объекты исходного массива в этот буфер.
Этот метод передает значения из данного исходного массива в этот буфер. Если в исходном массиве больше значений, чем в этом буфере, то есть если src.length > size()
, значения не передаются и создается исключение BufferOverflowException.
В противном случае этот метод копирует значения n = src.length
из заданного массива.
Параметры
источник | исходный массив, из которого должны быть прочитаны значения |
---|
Возврат
- этот буфер
Броски
исключение BufferOverflowException | если в этом буфере недостаточно места для значений исходного массива |
---|---|
ReadOnlyBufferException | если этот буфер доступен только для чтения |
общедоступный абстрактный DataBuffer <T> запись (T[] src, смещение int, длина int)
Метод массового размещения с использованием массивов int.
Этот метод передает значения из данного исходного массива в этот буфер. Если в исходном массиве больше значений, чем в этом буфере, то есть если length > size()
, значения не передаются и создается исключение BufferOverflowException.
В противном случае этот метод копирует значения n = length
из заданного массива в этот буфер, начиная с заданного смещения.
Параметры
источник | исходный массив, из которого должны быть прочитаны значения |
---|---|
компенсировать | смещение в массиве первого считываемого значения; должно быть неотрицательным и не превышать src.length |
длина | количество значений, которые необходимо прочитать из данного массива; должно быть неотрицательным и не превышать src.length - offset |
Возврат
- этот буфер
Броски
исключение BufferOverflowException | если в этом буфере недостаточно места для значений исходного массива |
---|---|
Индексаутофбаундсисключение | если предварительные условия для параметров смещения и длины не выполняются |
ReadOnlyBufferException | если этот буфер доступен только для чтения |