MethodHandles.ByteArrayViewVarHandle(Class, ByteOrder) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
int[]やlong[]など、異なるプリミティブ配列型であるかのように表示されるbyte[]配列の要素へのアクセスを許可する VarHandle を生成します。
[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
パラメーター
- viewArrayClass
- Class
型のコンポーネント型を持つビュー配列クラス T
- byteOrder
- ByteOrder
基になる byte 配列に格納されているビュー配列要素のエンディアン
返品
ビュー配列クラスのコンポーネント型に対応する要素のように表示される byte[] 配列の要素へのアクセスを提供する VarHandle
- 属性
注釈
int[]やlong[]など、異なるプリミティブ配列型であるかのように表示されるbyte[]配列の要素へのアクセスを許可する VarHandle を生成します。 VarHandle の変数型は viewArrayClass のコンポーネント型であり、座標型のリストは (byte[], int)されます。ここで、 int 座標型は、 byte[] 配列のインデックスである引数に対応します。 返された VarHandle は、 byte[] 配列内のインデックスにあるバイトにアクセスし、指定されたエンディアンに従って、 viewArrayClass のコンポーネント型の値との間でバイトを作成します。
サポートされているコンポーネント型 (変数型) は、 short、 char、 int、 long、 float 、および doubleです。
インデックスが0より小さいか、byte[]配列の長さからTのサイズ (バイト単位) を引いた値より大きい場合、特定のインデックスのバイトにアクセスするとIndexOutOfBoundsExceptionが発生します。
インデックスのバイトのアクセスは、配列とインデックスに関連付けられている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>
特定の配列で動作することなく、 byte[] 配列に対して、不適切なアクセス、つまりアトミック性の保証が決定される場合があります。
index、T、対応するボックス化された型、T_BOX、ミスアラインメントは次のように決定される場合があります。
{@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;
}
変数型が float または double の場合、アトミック更新アクセス モードはビットごとの表現を使用して値を比較します (それぞれ Float#floatToRawIntBits と Double#doubleToRawLongBitsを参照)。
9 に追加されました。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。