Langage

MethodHandles.ByteBufferViewVarHandle(Class, ByteOrder) Méthode

Définition

Produit un VarHandle donnant accès aux éléments d’un ByteBuffer affichage comme s’il s’agissait d’un tableau d’éléments d’un type de composant primitif différent à celui de byte, tel que 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

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, tel qu’il est stocké dans le sous-jacent ByteBuffer (Notez que cela remplace l’endianness d’un ByteBuffer)

Retours

VarHandle donnant accès aux éléments d’un ByteBuffer affichage 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 ByteBuffer affichage comme s’il s’agissait d’un tableau d’éléments d’un type de composant primitif différent à celui de byte, 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 (ByteBuffer, 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 dans un ByteBufferindex, 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 entraîne tout ReadOnlyBufferException autre chose que les modes d’accès en lecture si l’accès ByteBuffer en lecture seule est en lecture seule.

L’accès d’octets à un index donné entraîne une IndexOutOfBoundsException erreur si l’index est inférieur 0 ou supérieur à la limite inférieure à la ByteBuffer 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 à l’index et à l’index ByteBuffer . 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 un ByteBuffer, bb (direct ou autre), un index, T et il s’agit du type boxed correspondant, T_BOXcomme suit :

{@code
            int sizeOfT = T_BOX.BYTES;  // size in bytes of T
            ByteBuffer bb = ...
            int misalignedAtIndex = bb.alignmentOffset(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.byteBufferViewVarHandle(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 à