MethodHandles.ByteBufferViewVarHandle(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 um ByteBuffer modo exibido como se fosse uma matriz de elementos de um tipo de componente primitivo diferente ao de byte, como int[] ou 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
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 no subjacente ByteBuffer (observe que isso substitui a endianidade de um ByteBuffer)
Retornos
um VarHandle que dá acesso a elementos de um ByteBuffer modo exibido 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 um ByteBuffer modo exibido como se fosse uma matriz de elementos de um tipo de componente primitivo diferente ao de byte, como int[] ou long[]. O tipo de variável do VarHandle é o tipo de viewArrayClass componente e a lista de tipos de coordenadas é (ByteBuffer, 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 um ByteBuffer, compondo bytes de ou para um valor do tipo de componente de viewArrayClass acordo com a endianidade determinada.
Os tipos de componente com suporte (tipos de variáveis) são short, , , int, longe floatdouble. char
O acesso resultará em uma ReadOnlyBufferException para qualquer outra coisa que não seja os modos de acesso de leitura se for ByteBuffer somente leitura.
O acesso de bytes em um determinado índice resultará em um IndexOutOfBoundsException se o índice for menor 0 ou maior que o ByteBuffer limite 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 ao índice e ao ByteBuffer í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 um ByteBuffer, bb (direto ou não), um indexT , e é um tipo de caixa correspondente, T_BOXda seguinte maneira:
{@code
int sizeOfT = T_BOX.BYTES; // size in bytes of T
ByteBuffer bb = ...
int misalignedAtIndex = bb.alignmentOffset(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.