Langue

MethodHandles.ByteArrayViewVarHandle(Class, ByteOrder) Méthode

Définition

Produit un VarHandle donnant accès aux éléments d’un byte[] tableau vu comme s’il s’agissait d’un autre type de tableau primitif, tel que 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

Paramètres

viewArrayClass
Class

classe de tableau d’affichage, avec un type de composant T

byteOrder
ByteOrder

l’endianité des éléments du tableau d’affichage, comme stocké dans le tableau sous-jacent byte

Retours

VarHandle donnant accès aux éléments d’un byte[] tableau consulté comme si les éléments correspondant au type de composants de la classe de tableau d’affichage

Attributs

Remarques

Produit un VarHandle donnant accès aux éléments d’un byte[] tableau vu comme s’il s’agissait d’un autre type de tableau primitif, tel que int[] ou long[]. Le type de variable varHandle est le type de composant et la liste des types de viewArrayClass coordonnées est (byte[], int), où le int type de coordonnées correspond à un argument qui est un index dans un byte[] tableau. VarHandle retourné accède aux octets d’un index d’un byte[] tableau, en composant des octets vers ou à partir d’une valeur du type de composant d’après viewArrayClass l’endianité donnée.

Les types de composants pris en charge (types de variables) sont short, , charint, long, float et double.

L’accès d’octets à un index donné entraîne une IndexOutOfBoundsException erreur si l’index est inférieur 0 ou supérieur à la byte[] longueur du tableau moins la taille (en octets) de T.

L’accès d’octets à un index peut être aligné ou mal aligné pour T, par rapport à l’adresse de mémoire sous-jacente, A par exemple, associée au tableau et à l’index. Si l’accès est mal aligné, l’accès pour tout autre que les get modes d’accès set entraîne un IllegalStateException. Dans ce cas, l’accès atomique n’est garanti que par rapport à la plus grande puissance de deux qui divisent le GCD et A la taille (en octets) de T. Si l’accès est aligné, les modes d’accès suivants sont pris en charge et sont garantis pour prendre en charge l’accès atomique : <les modes d’accès en écriture en lecture ul<>li>pour tousT, à l’exception des modes get d’accès et set pour et sur long les double plateformes 32 bits. <modes d’accès à la mise à jour atomique li>pour int, longfloat ou double. (Les futures versions majeures de la JDK peuvent prendre en charge des types supplémentaires pour certains modes d’accès actuellement non pris en charge.) <modes d’accès aux mises à jour atomiques li>numeric pour int et long. (Les futures versions majeures de la plateforme JDK peuvent prendre en charge des types numériques supplémentaires pour certains modes d’accès actuellement non pris en charge.) <modes d’accès à la mise à jour atomique au>niveau du bit pour int et long. (Les futures versions majeures de la plateforme JDK peuvent prendre en charge des types numériques supplémentaires pour certains modes d’accès actuellement non pris en charge.) </ul>

L’accès mal aligné, et donc les garanties d’atomicité, peuvent être déterminées pour byte[] les tableaux sans fonctionner sur un tableau spécifique. Étant donné un indexT type boxed correspondant, T_BOXil est possible que l’alignement incorrect soit déterminé comme suit :

{@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 le type de variable est float ou double si les modes d’accès à la mise à jour atomique comparent les valeurs à l’aide de leur représentation au niveau du bit (voir Float#floatToRawIntBits et Double#doubleToRawLongBits, respectivement).

Ajouté dans 9.

Java documentation pour java.lang.invoke.MethodHandles.byteArrayViewVarHandle(java.lang.Class<?>, java.nio.ByteOrder).

Les parties de cette page sont des modifications basées sur le travail créé et partagé par Android Open Source et utilisées en fonction des termes décrits dans la Creative Commons 2.5 Attribution License.

S’applique à