語言

MethodHandles.ByteBufferViewVarHandle(Class, ByteOrder) 方法

定義

產生一個 VarHandle,允許存取 ByteBuffer 一個元素,視其為與 不同 byte原始元件類型的元素陣列,例如 int[]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

參數

viewArrayClass
Class

View 陣列類別,其元件類型為 T

byteOrder
ByteOrder

視圖陣列元素的字序,儲存在底層 ByteBuffer (注意此點會覆蓋 a ByteBuffer的字序)

傳回

一個 VarHandle 可存取 ByteBuffer 視圖中對應於視圖陣列類別元件類型元素的元素

屬性

備註

產生一個 VarHandle,允許存取 ByteBuffer 一個元素,視其為與 不同 byte原始元件類型的元素陣列,例如 int[]long[]或 。 VarHandle 的變數類型是 的 viewArrayClass 組件類型,座標類型列表為 (ByteBuffer, int),其中 int 座標類型對應於一個參數,該參數是陣列的 byte[] 索引。 回傳的 VarHandle 會存取索引中的 ByteBuffer位元組,根據給定的元序性,組合位元組與組件 viewArrayClass 類型的值。

支援的元件類型(變數類型)為 short、 char、 floatintlongdouble和 。

如果是ByteBuffer唯讀,存取模式以外的任何模式都會產生 aReadOnlyBufferException。

在給定索引處存取位元組時,若0索引大小小於或大ByteBuffer於限制減去 的T大小(以位元組為單位),則會產生 。IndexOutOfBoundsException

索引位元組的存取可能會根據底層記憶體位址A(例如與 ByteBuffer 和 索引相關聯)對齊或錯位T。 若存取不對齊,則存取模式以外getset的任何存取都會導致 IllegalStateException。 在這種情況下,原子存取僅在除以 的 A 最大二的冪次方與 的 T大小(以位元組為單位)時才有保證。 若存取模式對齊,則支援並保證支援原子存取:ul>li 對所有 T、除存取模式setget外,以及 與 doublelong 在 32 位元平台上的讀取寫入模式。><< <Li>原子更新存取模式對 int、 long、 floatdouble或 。 (未來主要平台版本的 JDK 可能會支援某些目前未支援的存取模式的額外類型。) <LI>數值原子更新存取模式 與 intlong。 (未來主要平台版本的 JDK 可能會支援某些目前未支援的存取模式的額外數字類型。) <LI>位元原子更新存取模式 與 intlong。 (未來主要平台版本的 JDK 可能會支援某些目前未支援的存取模式的額外數字類型。) </ul>

錯位存取,因此原子性保證,可對一個 、 bb (直接或非直接)、 Tindex及其對應的盒型類型 T_BOX,判定ByteBuffer如下:

{@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。

的 java.lang.invoke.MethodHandles.byteBufferViewVarHandle(java.lang.Class<?>, java.nio.ByteOrder)Java 檔。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

適用於