Lenguaje

MethodHandles.ByteBufferViewVarHandle(Class, ByteOrder) Método

Definición

Genera un VarHandle que proporciona acceso a los elementos de un ByteBuffer objeto visto como si fuera una matriz de elementos de un tipo de componente primitivo diferente al de byte, como int[] o 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

Parámetros

viewArrayClass
Class

la clase de matriz de vista, con un tipo de componente de tipo T

byteOrder
ByteOrder

la endianidad de los elementos de la matriz de vista, tal como se almacena en el subyacente ByteBuffer (Tenga en cuenta que esto invalida la endianidad de un ByteBuffer).

Devoluciones

varHandle que proporciona acceso a los elementos de un ByteBuffer objeto visualizado como si los elementos correspondientes al tipo de componentes de la clase de matriz de vista

Atributos

Comentarios

Genera un VarHandle que proporciona acceso a los elementos de un ByteBuffer objeto visto como si fuera una matriz de elementos de un tipo de componente primitivo diferente al de byte, como int[] o long[]. El tipo de variable varHandle es el tipo de componente de y la lista de viewArrayClass tipos de coordenadas es (ByteBuffer, int), donde el int tipo de coordenada corresponde a un argumento que es un índice en una byte[] matriz. VarHandle devuelto tiene acceso a bytes en un índice de , ByteBufferque compone bytes a o desde un valor del tipo de componente de viewArrayClass acuerdo con la endianidad especificada.

Los tipos de componente admitidos (tipos de variables) son short, char, int, longfloat y double.

El acceso dará como resultado cualquier ReadOnlyBufferException cosa que no sea los modos de acceso de lectura si es ByteBuffer de solo lectura.

El acceso de bytes en un índice determinado dará como resultado si IndexOutOfBoundsException el índice es menor 0 o mayor que el ByteBuffer límite menos el tamaño (en bytes) de T.

El acceso de bytes en un índice se puede alinear o desalinear para T, con respecto a la dirección de memoria subyacente, por ejemplo, A asociada al ByteBuffer índice y . Si el acceso está mal alineado, el acceso a cualquier otro elemento distinto de los get modos de acceso y set dará como resultado una IllegalStateExceptionexcepción . En tales casos, solo se garantiza el acceso atómico con respecto a la mayor potencia de dos que divide el GCD de A y el tamaño (en bytes) de T. Si el acceso está alineado, se admiten los siguientes modos de acceso y se garantiza que admiten el acceso atómico: <los modos de acceso de escritura de lectura ul<>li>para todos T, a excepción de los modos get de acceso y para long y setdouble en las plataformas de 32 bits. <li>atomic update access modes for int, longfloat o double. (Futuras versiones de plataforma principales del JDK pueden admitir tipos adicionales para determinados modos de acceso actualmente no admitidos). <li>numeric atomic update access modes for int and long. (Futuras versiones de la plataforma principal del JDK pueden admitir tipos numéricos adicionales para determinados modos de acceso actualmente no admitidos). <modos>de acceso de actualización atómica bit a bit para int y long. (Futuras versiones de la plataforma principal del JDK pueden admitir tipos numéricos adicionales para determinados modos de acceso actualmente no admitidos). </ul>

El acceso desalineado y, por lo tanto, las garantías de atomicidad se pueden determinar para , ByteBufferbb (directo o de otro modo), indexT un y es el tipo boxed correspondiente, , T_BOXcomo se indica a continuación:

{@code
            int sizeOfT = T_BOX.BYTES;  // size in bytes of T
            ByteBuffer bb = ...
            int misalignedAtIndex = bb.alignmentOffset(index, sizeOfT);
            boolean isMisaligned = misalignedAtIndex != 0;
            }

Si el tipo de variable es float o double , a continuación, los modos de acceso de actualización atómica comparan valores mediante su representación bit a bit (vea Float#floatToRawIntBits y Double#doubleToRawLongBits, respectivamente).

Agregado en 9.

Java documentación para java.lang.invoke.MethodHandles.byteBufferViewVarHandle(java.lang.Class<?>, java.nio.ByteOrder).

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android y se usan según los términos descritos en creative Creative Commons 2.5 Attribution License.

Se aplica a