MethodHandles.ByteBufferViewVarHandle(Class, ByteOrder) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Создает VarHandle, предоставляющий доступ к элементам ByteBuffer представления, как если бы это был массив элементов другого примитивного типа byteкомпонента, например int[] или long[].
[Android.Runtime.Register("byteBufferViewVarHandle", "(Ljava/lang/Class;Ljava/nio/ByteOrder;)Ljava/lang/invoke/VarHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.VarHandle? ByteBufferViewVarHandle(Java.Lang.Class? viewArrayClass, Java.Nio.ByteOrder? byteOrder);
[<Android.Runtime.Register("byteBufferViewVarHandle", "(Ljava/lang/Class;Ljava/nio/ByteOrder;)Ljava/lang/invoke/VarHandle;", "", ApiSince=33)>]
static member ByteBufferViewVarHandle : Java.Lang.Class * Java.Nio.ByteOrder -> Java.Lang.Invoke.VarHandle
Параметры
- viewArrayClass
- Class
Класс массива представления с типом компонента T
- byteOrder
- ByteOrder
конечная часть элементов массива представления, хранящейся в базовой ByteBuffer части (обратите внимание, что это переопределяет конечную конечную часть массива ByteBuffer)
Возвращаемое значение
VarHandle, предоставляющий доступ к элементам просматриваемого ByteBuffer элемента, как если бы элементы, соответствующие типу компонентов класса массива представления
- Атрибуты
Комментарии
Создает VarHandle, предоставляющий доступ к элементам ByteBuffer представления, как если бы это был массив элементов другого примитивного типа byteкомпонента, например int[] или long[]. Тип переменной VarHandle — это тип viewArrayClass компонента и список типов (ByteBuffer, int)координат, где int тип координат соответствует аргументу, который является индексом в byte[] массиве. Возвращаемый VarHandle обращается к байтам по индексу в ByteBufferиндексе, составляя байты к типу компонента или из значения типа viewArrayClass компонента в соответствии с заданной конечностью.
Поддерживаемые типы компонентов (переменные) — short, char, intlongи floatdouble.
Доступ приведет к возникновению ReadOnlyBufferException каких-либо действий, отличных от режимов доступа для чтения, если доступ ByteBuffer доступен только для чтения.
Доступ к байтам в заданном индексе приведет к тому IndexOutOfBoundsException , что индекс меньше 0 или больше ByteBuffer предела минус размер (в байтах T).
Доступ к байтам в индексе может быть выровнен или неправильно настроен в Tотношении базового адреса памяти, A например связанного с ByteBuffer индексом. Если доступ неправильно задан, то доступ для всех, кроме get режимов доступа, set приведет к IllegalStateExceptionвозникновению ошибки. В таких случаях атомарный доступ гарантируется только в отношении наибольшей мощности двух, разделяющих GCD A и размер (в байтах T). Если доступ согласован, то поддерживаются следующие режимы доступа и гарантированно поддерживают атомарный доступ: <режимы доступа на чтение ul<>li>для всехT, за исключением режимов get доступа и set на longdouble 32-разрядных платформах.
<режимы доступа к атомарным обновлениям для>, longfloat или double.int (Будущие основные выпуски платформы JDK могут поддерживать дополнительные типы для определенных неподдерживаемых режимов доступа.) <режимы>доступа к числовым атомарным обновлениям для int и long. (Будущие основные выпуски платформы JDK могут поддерживать дополнительные числовые типы для определенных неподдерживаемых режимов доступа. <режимы>int доступа к побитового атомарного обновления для и long. (Будущие основные выпуски платформы JDK могут поддерживать дополнительные числовые типы для определенных неподдерживаемых режимов доступа. </ul>
Неправильный доступ и, следовательно, гарантии атомарности, могут быть определены для ByteBuffer( bb прямого или другого), а indexT также соответствующий тип, T_BOXкак показано ниже:
{@code
int sizeOfT = T_BOX.BYTES; // size in bytes of T
ByteBuffer bb = ...
int misalignedAtIndex = bb.alignmentOffset(index, sizeOfT);
boolean isMisaligned = misalignedAtIndex != 0;
}
Если тип переменной равен float или double затем сравните значения режимов доступа атомарного обновления с помощью побитового представления (см Float#floatToRawIntBits . и Double#doubleToRawLongBitsсоответственно).
Добавлено в 9.
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".