MethodHandles.ByteArrayViewVarHandle(Class, ByteOrder) メソッド

定義

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 のコンポーネント型の値との間でバイトを作成します。

サポートされているコンポーネント型 (変数型) は、 shortcharintlongfloat 、および doubleです。

インデックスが0より小さいか、byte[]配列の長さからTのサイズ (バイト単位) を引いた値より大きい場合、特定のインデックスのバイトにアクセスするとIndexOutOfBoundsExceptionが発生します。

インデックスのバイトのアクセスは、配列とインデックスに関連付けられているA、基になるメモリ アドレスに関して、Tに対してアラインまたはミスアラインされる可能性があります。 アクセスがずれている場合、 get および set アクセス モード以外のアクセスは IllegalStateExceptionになります。 このような場合、アトミック アクセスは、 A の GCD と Tのサイズ (バイト単位) を除算する 2 の最大の累乗に対してのみ保証されます。 アクセスがアラインされている場合は、次のアクセス モードがサポートされ、アトミック アクセスをサポートすることが保証されます。<ul><li> 32 ビット プラットフォームでのlongdoubleのアクセス モードgetsetを除き、すべてのTの書き込みアクセス モードを読み取ります。 <li>intlongfloat、またはdouble用のアトミック更新アクセス モード。 (JDK の今後のメジャー プラットフォーム リリースでは、現在サポートされていない特定のアクセス モードに対して追加の種類がサポートされる可能性があります)。<>intlongのアトミックなアトミック更新アクセス モード。 (JDK の今後のメジャー プラットフォーム リリースでは、現在サポートされていない特定のアクセス モードに対して追加の数値型がサポートされる可能性があります)。<>intlongのアトミック更新アクセス モード。 (JDK の今後のメジャー プラットフォーム リリースでは、現在サポートされていない特定のアクセス モードに対して追加の数値型がサポートされる可能性があります)。 </ul>

特定の配列で動作することなく、 byte[] 配列に対して、不適切なアクセス、つまりアトミック性の保証が決定される場合があります。 indexT、対応するボックス化された型、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#floatToRawIntBitsDouble#doubleToRawLongBitsを参照)。

9 に追加されました。

Javaドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

適用対象