MethodHandles.ByteArrayViewVarHandle(Class, ByteOrder) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
產生一個 VarHandle,允許存取陣列中看似不同原始陣列類型的元素 byte[] ,例如 int[] 或 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
參數
- viewArrayClass
- Class
View 陣列類別,其元件類型為 T
- byteOrder
- ByteOrder
視圖陣列元素的端序性,並儲存在底層 byte 陣列中
傳回
一個 VarHandle 讓它存取陣列中對 byte[] 應於 view 陣列類別元件類型的元素
- 屬性
備註
產生一個 VarHandle,允許存取陣列中看似不同原始陣列類型的元素 byte[] ,例如 int[] 或 long[]。 VarHandle 的變數類型是 的 viewArrayClass 組件類型,座標類型列表為 (byte[], int),其中 int 座標類型對應於一個參數,該參數是陣列的 byte[] 索引。 回傳的 VarHandle 會存取陣列中 byte[] 索引的位元組,根據給定的字節序值,將位元組組合成或從元件類型的 viewArrayClass 值。
支援的元件類型(變數類型)為 short、 char、 floatintlongdouble和 。
若索引大小減0byte[]去 的T大小(以位元組計),則在特定索引處存取位元組,將產生 。IndexOutOfBoundsException
索引位元組的存取可能會根據底層記憶體位址A(例如與陣列和索引相關聯)進行對齊或錯位T。 若存取不對齊,則存取模式以外getset的任何存取都會導致 IllegalStateException。 在這種情況下,原子存取僅在除以 的 A 最大二的冪次方與 的 T大小(以位元組為單位)時才有保證。 若存取模式對齊,則支援並保證支援原子存取:ul>li 對所有 T、除存取模式setget外,以及 與 doublelong 在 32 位元平台上的讀取寫入模式。><<
<Li>原子更新存取模式對 int、 long、 floatdouble或 。 (未來主要平台版本的 JDK 可能會支援某些目前未支援的存取模式的額外類型。) <LI>數值原子更新存取模式 與 intlong。 (未來主要平台版本的 JDK 可能會支援某些目前未支援的存取模式的額外數字類型。) <LI>位元原子更新存取模式 與 intlong。 (未來主要平台版本的 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。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。