MethodHandles.ByteArrayViewVarHandle(Class, ByteOrder) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Produz um VarHandle que dá acesso a elementos de uma byte[] matriz exibida como se fosse um tipo de matriz primitiva diferente, como int[] ou 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
a classe de matriz de exibição, com um tipo de componente do tipo T
- byteOrder
- ByteOrder
a endianidade dos elementos da matriz de exibição, conforme armazenado na matriz subjacente byte
Retornos
um VarHandle que dá acesso a elementos de uma byte[] matriz exibida como se os elementos correspondentes ao tipo de componentes da classe de matriz de exibição
- Atributos
Comentários
Produz um VarHandle que dá acesso a elementos de uma byte[] matriz exibida como se fosse um tipo de matriz primitiva diferente, como int[] ou long[]. O tipo de variável do VarHandle é o tipo de viewArrayClass componente e a lista de tipos de coordenadas é (byte[], int), em que o int tipo de coordenada corresponde a um argumento que é um índice em uma byte[] matriz. O VarHandle retornado acessa bytes em um índice em uma byte[] matriz, compondo bytes de ou para um valor do tipo de componente de viewArrayClass acordo com a endianidade fornecida.
Os tipos de componente com suporte (tipos de variáveis) são short, , , int, longe floatdouble. char
O acesso de bytes em um determinado índice resultará em um IndexOutOfBoundsException se o índice for menor 0 ou maior que o comprimento da byte[] matriz menos o tamanho (em bytes) de T.
O acesso de bytes em um índice pode ser alinhado ou desalinhado em Trelação ao endereço de memória subjacente, A por exemplo, associado à matriz e ao índice. Se o acesso estiver desalinhado, o acesso para qualquer outra coisa que não seja os get modos de set acesso resultará em um IllegalStateException. Nesses casos, o acesso atômico só é garantido em relação à maior potência de dois que divide o GCD e A o tamanho (em bytes) de T. Se o acesso estiver alinhado, os seguintes modos de acesso têm suporte e têm a garantia de dar suporte ao acesso atômico: <modos de acesso de gravação de leitura ul><li>para todos T, com exceção dos modos get de acesso e setlong para e double em plataformas de 32 bits.
<modos de acesso de atualização atômica li>para int, longfloat ou double. (Futuras versões principais da plataforma do JDK podem dar suporte a tipos adicionais para determinados modos de acesso atualmente sem suporte.) <li>numeric atomic update access modes for int e long. (Futuras versões principais da plataforma do JDK podem dar suporte a tipos numéricos adicionais para determinados modos de acesso atualmente sem suporte.) <modos de acesso de atualização atômica li>bit a bit para int e long. (Futuras versões principais da plataforma do JDK podem dar suporte a tipos numéricos adicionais para determinados modos de acesso atualmente sem suporte.) </ul>
O acesso desalinhado e, portanto, as garantias de atomicidade podem ser determinados para byte[] matrizes sem operar em uma matriz específica. Dado um indexT tipo de caixa correspondente, T_BOXo desalinhamento pode ser determinado da seguinte maneira:
{@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;
}
Se o tipo de variável for float ou double os modos de acesso de atualização atômica compararem valores usando sua representação bit a bit (veja Float#floatToRawIntBits e Double#doubleToRawLongBits, respectivamente).
Adicionado em 9.
Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usadas de acordo com os termos descritos na Licença de Atribuição Creative Commons 2.5.