MethodHandles.ByteBufferViewVarHandle(Class, ByteOrder) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
生成一个 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 值构成字节。
支持的组件类型(变量类型)包括short、char、int和 floatlongdouble。
如果ByteBuffer读取访问模式为只读,则访问将产生ReadOnlyBufferException除读取访问模式以外的任何操作。
在给定索引处访问字节将导致IndexOutOfBoundsException索引小于0或大于ByteBuffer限制减去大小(以字节为单位)。T
索引处的字节访问可能与基础内存地址A(例如,与该地址和ByteBuffer索引关联)对齐或不对齐T。 如果访问错误,则访问除访问模式以外的getset任何内容都将导致IllegalStateException访问。 在这种情况下,仅保证原子访问的最大功率为两个,其大小(以字节为单位)的 GCD A 和大小(以字节为单位)。T 如果访问保持一致,则支持以下访问模式,并保证支持原子访问:<ul<>li>读取写入访问模式适用于所有T模式,但访问模式get和 longsetdouble 32 位平台上除外。
<li>atomic update access modes forint, longfloat 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;
}
如果变量类型为float或double原子更新访问模式,则使用其按位表示形式(请参阅和Double#doubleToRawLongBits分别)Float#floatToRawIntBits比较值。
已在 9 中添加。
本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。