MethodHandles.ByteArrayViewVarHandle(Class, ByteOrder) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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.
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.