MethodHandles.ByteArrayViewVarHandle(Class, ByteOrder) Método

Definición

Genera una clase VarHandle que proporciona acceso a los elementos de una byte[] matriz vista como si fuera un tipo de matriz primitivo diferente, como int[] o long[].

[Android.Runtime.Register("byteArrayViewVarHandle", "(Ljava/lang/Class;Ljava/nio/ByteOrder;)Ljava/lang/invoke/VarHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.VarHandle? ByteArrayViewVarHandle(Java.Lang.Class? viewArrayClass, Java.Nio.ByteOrder? byteOrder);
[<Android.Runtime.Register("byteArrayViewVarHandle", "(Ljava/lang/Class;Ljava/nio/ByteOrder;)Ljava/lang/invoke/VarHandle;", "", ApiSince=33)>]
static member ByteArrayViewVarHandle : 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, como se almacena en la matriz subyacente byte .

Devoluciones

varHandle que proporciona acceso a los elementos de una byte[] matriz vista como si los elementos correspondientes al tipo de componentes de la clase de matriz de vista

Atributos

Comentarios

Genera una clase VarHandle que proporciona acceso a los elementos de una byte[] matriz vista como si fuera un tipo de matriz primitivo diferente, como int[] o long[]. El tipo de variable varHandle es el tipo de componente de y la lista de viewArrayClass tipos de coordenadas es (byte[], int), donde el int tipo de coordenada corresponde a un argumento que es un índice en una byte[] matriz. VarHandle devuelto accede a bytes en un índice de una byte[] matriz, redactando bytes hacia 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 de bytes en un índice determinado dará como resultado si IndexOutOfBoundsException el índice es menor 0 o mayor que la longitud de la byte[] matriz 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 a la matriz y al índice. 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 tanto, las garantías de atomicidad se pueden determinar para byte[] matrices sin operar en una matriz específica. Dado un index, T y es el tipo boxed correspondiente, T_BOX, se puede determinar la desalineación como se indica a continuación:

{@code
            int sizeOfT = T_BOX.BYTES;  // size in bytes of T
            int misalignedAtZeroIndex = ByteBuffer.wrap(new byte[0]).
                alignmentOffset(0, sizeOfT);
            int misalignedAtIndex = (misalignedAtZeroIndex + 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.byteArrayViewVarHandle(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