MethodHandles.ByteArrayViewVarHandle(Class, ByteOrder) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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.
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.