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

视图数组类,其组件类型为 T

byteOrder
ByteOrder

视图数组元素的结束度( ByteBuffer 请注意,这将替代 a ByteBuffer的结束度)

返回

一个 VarHandle,提供对视图元素 ByteBuffer 的访问权限,就像与视图数组类的组件类型对应的元素一样

属性

注解

生成一个 VarHandle,它授予对视图元素 ByteBuffer 的访问权限,就像它是不同基元组件类型的 byte元素数组,例如 int[]long[]。 VarHandle 的变量类型是组件类型的组件类型和 viewArrayClass 坐标类型的 (ByteBuffer, int)列表,其中 int 坐标类型对应于数组中 byte[] 索引的参数。 返回的 VarHandle 访问索引处的 ByteBuffer字节,根据给定的字节数,从组件类型的 viewArrayClass 值构成字节。

支持的组件类型(变量类型)包括shortcharintfloatlongdouble

如果ByteBuffer读取访问模式为只读,则访问将产生ReadOnlyBufferException除读取访问模式以外的任何操作。

在给定索引处访问字节将导致IndexOutOfBoundsException索引小于0或大于ByteBuffer限制减去大小(以字节为单位)。T

索引处的字节访问可能与基础内存地址A(例如,与该地址和ByteBuffer索引关联)对齐或不对齐T。 如果访问错误,则访问除访问模式以外的getset任何内容都将导致IllegalStateException访问。 在这种情况下,仅保证原子访问的最大功率为两个,其大小(以字节为单位)的 GCD A 和大小(以字节为单位)。T 如果访问保持一致,则支持以下访问模式,并保证支持原子访问:<ul<>li>读取写入访问模式适用于所有T模式,但访问模式getlongsetdouble 32 位平台上除外。 <li>atomic update access modes forintlongfloat ordouble. (对于某些当前不支持的访问模式,JDK 的未来主要平台版本可能支持其他类型。 <li>numeric atomic update access modes for int and long. (将来的 JDK 主要平台版本可能支持某些当前不支持的访问模式的其他数值类型。 <li>按位原子更新访问模式和 intlong。 (将来的 JDK 主要平台版本可能支持某些当前不支持的访问模式的其他数值类型。 </ul>

错误的访问(因此,原子性保证)可以确定为 、ByteBufferbb(直接或其他)、一个indexT,并且它是相应的装箱类型,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;
            }

如果变量类型为floatdouble原子更新访问模式,则使用其按位表示形式(请参阅和Double#doubleToRawLongBits分别)Float#floatToRawIntBits比较值。

已在 9 中添加。

Java文档java.lang.invoke.MethodHandles.byteBufferViewVarHandle(java.lang.Class<?>, java.nio.ByteOrder)

本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。

适用于