MethodHandles.ByteBufferViewVarHandle(Class, ByteOrder) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
int[]やlong[]など、byteとは異なるプリミティブ コンポーネント型の要素の配列であるかのように表示されるByteBufferの要素へのアクセスを許可する VarHandle を生成します。
[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
パラメーター
- viewArrayClass
- Class
型のコンポーネント型を持つビュー配列クラス T
- byteOrder
- ByteOrder
基になる ByteBuffer に格納されているビュー配列要素のエンディアン (これは ByteBufferのエンディアンをオーバーライドすることに注意してください)
返品
ビュー配列クラスのコンポーネント型に対応する要素のように表示 ByteBuffer の要素へのアクセスを提供する VarHandle
- 属性
注釈
int[]やlong[]など、byteとは異なるプリミティブ コンポーネント型の要素の配列であるかのように表示されるByteBufferの要素へのアクセスを許可する VarHandle を生成します。 VarHandle の変数型は viewArrayClass のコンポーネント型であり、座標型のリストは (ByteBuffer, int)されます。ここで、 int 座標型は、 byte[] 配列のインデックスである引数に対応します。 返された VarHandle は、 ByteBufferのインデックスにあるバイトにアクセスし、指定されたエンディアンに従って、 viewArrayClass のコンポーネント型の値との間でバイトを作成します。
サポートされているコンポーネント型 (変数型) は、 short、 char、 int、 long、 float 、および doubleです。
ByteBufferが読み取り専用の場合、読み取りアクセス モード以外のアクセスはReadOnlyBufferExceptionになります。
インデックスが0未満であるか、Tのサイズ (バイト単位) を引いたByteBuffer制限を超えている場合、特定のインデックスのバイトにアクセスするとIndexOutOfBoundsExceptionが発生します。
インデックスのバイトのアクセスは、基になるメモリ アドレス (たとえば、ByteBufferとインデックスに関連付けられているA) に関して、Tに対してアラインまたはミスアラインされる可能性があります。 アクセスがずれている場合、 get および set アクセス モード以外のアクセスは IllegalStateExceptionになります。 このような場合、アトミック アクセスは、 A の GCD と Tのサイズ (バイト単位) を除算する 2 の最大の累乗に対してのみ保証されます。 アクセスがアラインされている場合は、次のアクセス モードがサポートされ、アトミック アクセスをサポートすることが保証されます。<ul><li> 32 ビット プラットフォームでのlongとdoubleのアクセス モードgetとsetを除き、すべてのTの書き込みアクセス モードを読み取ります。
<li>int、long、float、またはdouble用のアトミック更新アクセス モード。 (JDK の今後のメジャー プラットフォーム リリースでは、現在サポートされていない特定のアクセス モードに対して追加の種類がサポートされる可能性があります)。<>intとlongのアトミックなアトミック更新アクセス モード。 (JDK の今後のメジャー プラットフォーム リリースでは、現在サポートされていない特定のアクセス モードに対して追加の数値型がサポートされる可能性があります)。<>intとlongのアトミック更新アクセス モード。 (JDK の今後のメジャー プラットフォーム リリースでは、現在サポートされていない特定のアクセス モードに対して追加の数値型がサポートされる可能性があります)。 </ul>
不適切なアクセス、したがってアトミック性の保証は、次のように、 ByteBuffer、 bb (直接またはその他)、 index、 T 、対応するボックス化された型 T_BOXに対して決定される場合があります。
{@code
int sizeOfT = T_BOX.BYTES; // size in bytes of T
ByteBuffer bb = ...
int misalignedAtIndex = bb.alignmentOffset(index, sizeOfT);
boolean isMisaligned = misalignedAtIndex != 0;
}
変数型が float または double の場合、アトミック更新アクセス モードはビットごとの表現を使用して値を比較します (それぞれ Float#floatToRawIntBits と Double#doubleToRawLongBitsを参照)。
9 に追加されました。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。