MethodHandles.ByteArrayViewVarHandle(Class, ByteOrder) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Erzeugt eine VarHandle, die Zugriff auf Elemente eines byte[] Arrays gibt, die so betrachtet werden, als ob es sich um einen anderen primitiven Arraytyp handelt, z int[] . B. oder 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
Parameter
- viewArrayClass
- Class
die Ansichtsarrayklasse mit einem Komponententyp des Typs T
- byteOrder
- ByteOrder
die Endianität der Ansichtsarrayelemente, wie im zugrunde liegenden byte Array gespeichert
Gibt zurück
ein VarHandle, das Zugriff auf Elemente eines byte[] Arrays gibt, die so angezeigt werden, als ob Elemente, die dem Komponententyp der Ansichtsarrayklasse entsprechen
- Attribute
Hinweise
Erzeugt eine VarHandle, die Zugriff auf Elemente eines byte[] Arrays gibt, die so betrachtet werden, als ob es sich um einen anderen primitiven Arraytyp handelt, z int[] . B. oder long[]. Der Variabletyp von VarHandle ist der Komponententyp viewArrayClass und die Liste der Koordinatentypen (byte[], int), wobei der int Koordinatentyp einem Argument entspricht, das ein Index in einem byte[] Array ist. Die zurückgegebene VarHandle greift in einem Index in einem byte[] Array auf Bytes zu oder aus einem Wert des Komponententyps gemäß viewArrayClass der angegebenen Endianität.
Die unterstützten Komponententypen (Variablentypen) sind short, , char, int, und doublelongfloat .
Der Zugriff auf Bytes in einem bestimmten Index führt zu einem IndexOutOfBoundsException , wenn der Index kleiner 0 oder größer als die byte[] Arraylänge minus der Größe (in Bytes) von Tist.
Der Zugriff auf Bytes an einem Index kann in Bezug auf die zugrunde liegende Speicheradresse, z. BA. im Zusammenhang mit dem Array und dem Index, ausgerichtet oder falsch ausgerichtet Twerden. Wenn der Zugriff falsch ausgerichtet ist, führt der Zugriff für andere Elemente als die get Zugriffsmodi set zu einem IllegalStateException. In solchen Fällen wird der atome Zugang nur in Bezug auf die größte Macht von zwei garantiert, die die GCD teilt A und die Größe (in Byte) von T. Wenn der Zugriff ausgerichtet ist, werden die folgenden Zugriffsmodi unterstützt und garantiert den atomischen Zugriff: <ul><li>Lesezugriffsmodi für alle T, mit Ausnahme von Zugriffsmodi get und für long und setdouble auf 32-Bit-Plattformen.
<Li>Atom-Update-Zugriffsmodi für int, , longoder floatdouble. (Zukünftige Hauptversionen von JDK unterstützen möglicherweise zusätzliche Typen für bestimmte derzeit nicht unterstützte Zugriffsmodi.) <Li>numerische Atomaktualisierungs-Zugriffsmodi für int und long. (Zukünftige Hauptversionen von JDK unterstützen möglicherweise zusätzliche numerische Typen für bestimmte derzeit nicht unterstützte Zugriffsmodi.) <li>bitweise Atom-Update-Zugriffsmodi für int und long. (Zukünftige Hauptversionen von JDK unterstützen möglicherweise zusätzliche numerische Typen für bestimmte derzeit nicht unterstützte Zugriffsmodi.) </ul>
Falsch ausgerichteter Zugang und somit Atomitätsgarantien können für byte[] Arrays bestimmt werden, ohne auf einem bestimmten Array zu arbeiten. Bei einem indexT zugehörigen Feldtyp T_BOXkann die Fehlausrichtung wie folgt bestimmt werden:
{@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;
}
Wenn der Variabletyp den Zugriffsmodi für atome Aktualisierungen entspricht float , double werden Werte mit der bitweisen Darstellung verglichen (siehe Float#floatToRawIntBits bzw Double#doubleToRawLongBits. ).
Hinzugefügt in 9.
Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die von der Android Open Source Project erstellt und gemeinsam verwendet und gemäß den in der 2.5 Attribution License beschriebenen Begriffen verwendet werden.