MethodHandles.ByteArrayViewVarHandle(Class, ByteOrder) Método

Definição

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.

Documentação Java para java.lang.invoke.MethodHandles.byteArrayViewVarHandle(java.lang.Class<?>, java.nio.ByteOrder).

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.

Aplica-se a