Sprache

MethodHandles.ByteBufferViewVarHandle(Class, ByteOrder) Methode

Definition

Erzeugt eine VarHandle, die Zugriff auf Elemente eines ByteBuffer betrachteten, als wäre es ein Array von Elementen eines anderen primitiven Komponententyps, bytewie int[] z. B. oder 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

Parameter

viewArrayClass
Class

die Ansichtsarrayklasse mit einem Komponententyp des Typs T

byteOrder
ByteOrder

die Endianität der Ansichtsarrayelemente, wie in der zugrunde liegenden ByteBuffer gespeichert (Beachten Sie, dass die Endianität eines ByteBuffer)

Gibt zurück

eine VarHandle, die Zugriff auf Elemente einer ByteBuffer angezeigten, als ob Elemente, die dem Komponententyp der Ansichtsarrayklasse entsprechen

Attribute

Hinweise

Erzeugt eine VarHandle, die Zugriff auf Elemente eines ByteBuffer betrachteten, als wäre es ein Array von Elementen eines anderen primitiven Komponententyps, bytewie int[] z. B. oder long[]. Der Variabletyp von VarHandle ist der Komponententyp viewArrayClass und die Liste der Koordinatentypen (ByteBuffer, int), wobei der int Koordinatentyp einem Argument entspricht, das ein Index in einem byte[] Array ist. Die zurückgegebene VarHandle greift auf Bytes an einem Index in einem ByteBuffer, kompositorischen Byte zu oder aus einem Wert des Komponententyps gemäß viewArrayClass der angegebenen Endianität zu.

Die unterstützten Komponententypen (Variablentypen) sind short, , char, int, und doublelongfloat .

Access führt zu einem ReadOnlyBufferException anderen Element als den Lesezugriffsmodi, wenn dies ByteBuffer schreibgeschützt ist.

Der Zugriff auf Bytes bei einem bestimmten Index führt zu einem IndexOutOfBoundsException , wenn der Index kleiner 0 oder größer als der ByteBuffer Grenzwert ist, der die Größe (in Bytes) von T.

Der Zugriff auf Bytes an einem Index kann in Bezug auf die zugrunde liegende Speicheradresse, z. BA. im Zusammenhang mit dem und dem ByteBuffer Index, ausgerichtet oder falsch Tausgerichtet werden. 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 ein ByteBuffer, bb (direktes oder anderweitiges), ein index, T und es handelt sich um einen entsprechenden Boxtyp, T_BOXwie folgt:

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

Java Dokumentation für java.lang.invoke.MethodHandles.byteBufferViewVarHandle(java.lang.Class<?>, java.nio.ByteOrder).

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.

Gilt für: