Язык

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.

Java документации по java.lang.invoke.MethodHandles.byteBufferViewVarHandle(java.lang.Class<?>, java.nio.ByteOrder).

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

Применяется к