Share via


ByteBuffer 类

定义

字节缓冲区。

[Android.Runtime.Register("java/nio/ByteBuffer", DoNotGenerateAcw=true)]
public abstract class ByteBuffer : Java.Nio.Buffer, IDisposable, Java.Interop.IJavaPeerable, Java.Lang.IComparable
[<Android.Runtime.Register("java/nio/ByteBuffer", DoNotGenerateAcw=true)>]
type ByteBuffer = class
    inherit Buffer
    interface IComparable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
继承
ByteBuffer
派生
属性
实现

注解

字节缓冲区。

此类定义对字节缓冲区的六类操作:

<ul>

<李>

读取和写入单个字节的绝对和相对#get() <i>get</i>#put(byte) <i>put</i>和方法;

</李>

<李>

将连续字节序列从此缓冲区传输到数组的相对 #get(byte[]) <i>bulk get</i> 方法;

</李>

<李>

将字节数组或其他某个字节缓冲区中的连续字节序列传输到此缓冲区的相对 #put(byte[]) <i>bulk put</i> 方法;

</李>

<李>

读取和写入其他基元类型的值的绝对和相对 #getChar() <i>get</i>#putChar(char) <i>put</i> 方法,以特定字节顺序将它们转换为字节序列和从字节序列转换它们;

</李>

<李>

用于创建 视图缓冲区的方法,允许将字节缓冲区视为包含某些其他基元类型的值的缓冲区;和

</李>

<李>

#compact compacting#duplicate duplicating#slice slicing 字节缓冲区的方法。

</李>

</ul>

字节缓冲区可由 创建 #allocate <i>allocation</i>,后者为缓冲区的 分配空间

内容,或由 #wrap(byte[]) <i>wrapping</i> 现有字节数组进入缓冲区。

“direct”><h2> 直接 缓冲区与 非直接缓冲区 </h2>

字节缓冲区为 直接 缓冲区或 非直接缓冲区。 给定直接字节缓冲区后,Java 虚拟机将尽最大努力直接在其上执行本机 I/O 操作。 也就是说,在每次调用基础操作系统的本机 I/O 操作之一之前或之后,它将尝试避免将缓冲区的内容复制到 ( (或) 从) 中间缓冲区复制。

可以通过调用 #allocateDirect(int) allocateDirect 此类的工厂方法创建直接字节缓冲区。 此方法返回的缓冲区的分配和解除分配成本通常比非直接缓冲区高一些。 直接缓冲区的内容可能驻留在正常的垃圾回收堆之外,因此它们对应用程序的内存占用的影响可能并不明显。 因此,建议主要为受基础系统本机 I/O 操作约束的大型长生存期缓冲区分配直接缓冲区。 通常,最好仅在直接缓冲区产生可测量的程序性能提升时分配它们。

直接字节缓冲区也可以由 java.nio.channels.FileChannel#map mapping 文件的区域直接创建到内存中。 Java 平台的实现可以选择性地支持通过 JNI 从本机代码创建直接字节缓冲区。 如果这些类型的缓冲区之一的实例引用不可访问的内存区域,则尝试访问该区域不会更改缓冲区的内容,并将导致在访问时或以后的某个时间引发未指定的异常。

字节缓冲区是直接的还是非直接的,可以通过调用其 #isDirect isDirect 方法来确定。 提供此方法是为了在性能关键型代码中完成显式缓冲区管理。

“bin”><h2> 访问二进制数据 </h2>

此类定义用于读取和写入所有其他基元类型的值的方法,但 除外 boolean。 基元值根据缓冲区的当前字节顺序(可通过 方法检索和修改 #order order )转换为 (或从) 字节序列中转换。 特定字节顺序由 类的 ByteOrder 实例表示。 字节缓冲区的初始顺序始终 ByteOrder#BIG_ENDIAN BIG_ENDIAN为 。

为了访问异类二进制数据(即不同类型的值序列),此类为每个类型定义一系列绝对和相对 getput 方法。 例如,对于 32 位浮点值,此类定义:

<blockquote>

float  {@link #getFloat()}
            float  {@link #getFloat(int) getFloat(int index)}
             void  {@link #putFloat(float) putFloat(float f)}
             void  {@link #putFloat(int,float) putFloat(int index, float f)}

</blockquote>

为类型 char、、shortintlongdouble定义了相应的方法。 绝对 getput 方法的索引参数以字节为单位,而不是读取或写入的类型。

“views”>

为了访问同质二进制数据(即同一类型的值序列),此类定义了可以创建给定字节缓冲区 视图 的方法。 视图缓冲区只是另一个缓冲区,其内容由字节缓冲区提供支持。 对字节缓冲区内容的更改将在视图缓冲区中可见,反之亦然;两个缓冲区的位置、限制和标记值是独立的。 #asFloatBuffer() asFloatBuffer例如, 方法创建 类的FloatBuffer实例,该实例由调用方法的字节缓冲区提供支持。 为类型 char、、shortintlongdouble定义了相应的视图创建方法。

与上述特定于类型的 getput 方法系列不同,视图缓冲区有三个重要优势:

<ul>

<李>

视图缓冲区不是按字节编制索引,而是按其值的类型特定大小编制索引;

</李>

<李>

视图缓冲区提供相对批量 获取放置 方法,这些方法可以在缓冲区和数组或相同类型的其他缓冲区之间传输连续的值序列;和

</李>

<李>

视图缓冲区可能更高效,因为当且仅当其后备字节缓冲区为直接时,它是直接的。

</李>

</ul>

视图缓冲区的字节顺序固定为创建视图时其字节缓冲区的字节顺序。

<h2> 调用链接 </h2>

此类中没有要返回的值的方法被指定为返回调用它们的缓冲区。 这允许链接方法调用。

语句序列

<blockquote>

bb.putInt(0xCAFEBABE);
            bb.putShort(3);
            bb.putShort(45);

</blockquote>

例如,可以替换为单个语句

<blockquote>

bb.putInt(0xCAFEBABE).putShort(3).putShort(45);

</blockquote>

在 1.4 中添加。

java.nio.ByteBufferJava 文档。

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

构造函数

ByteBuffer(IntPtr, JniHandleOwnership)

创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。

属性

Char

返回当前位置的字符,并将位置增加 2。

Class

返回此 Object的运行时类。

(继承自 Object)
Double

返回当前位置的双精度值,并将位置增加 8。

Float

返回当前位置的浮点数,并将位置增加 4。

Handle

基础 Android 实例的句柄。

(继承自 Object)
HasArray

指示此缓冲区是否由可访问的字节数组提供支持。

HasRemaining

指示当前位置和限制之间是否存在任何元素。

(继承自 Buffer)
Int

返回当前位置的 int,并将位置增加 4。

IsDirect

如果这是直接缓冲区,则返回 true。

(继承自 Buffer)
IsReadOnly

指示此缓冲区是否为只读。

(继承自 Buffer)
JniIdentityHashCode

字节缓冲区。

(继承自 Object)
JniPeerMembers

字节缓冲区。

Long

返回当前位置的多头值,并将位置增加 8。

PeerReference

字节缓冲区。

(继承自 Object)
Short

返回当前位置的空头,并将位置增加 2。

ThresholdClass

此 API 支持 Mono for Android 基础结构,不应直接从代码使用。

ThresholdType

此 API 支持 Mono for Android 基础结构,不应直接从代码使用。

方法

AlignedSlice(Int32)

创建一个新的字节缓冲区,其内容是此缓冲区内容的共享和对齐子序列。

AlignmentOffset(Int32, Int32)

返回内存地址,该地址指向给定索引处的字节,对给定单位大小进行模化。

Allocate(Int32)

分配新的字节缓冲区。

AllocateDirect(Int32)

分配新的直接字节缓冲区。

ArrayOffset()

返回缓冲区的第一个元素   (可选操作)

AsCharBuffer()

将此字节缓冲区的视图创建为字符缓冲区。

AsDoubleBuffer()

将此字节缓冲区创建为双缓冲区的视图。

AsFloatBuffer()

将此字节缓冲区的视图创建为浮点缓冲区。

AsIntBuffer()

将此字节缓冲区的视图创建为 int 缓冲区。

AsLongBuffer()

创建此字节缓冲区作为长缓冲区的视图。

AsReadOnlyBuffer()

创建共享此缓冲区内容的新只读字节缓冲区。

AsShortBuffer()

创建此字节缓冲区作为短缓冲区的视图。

Capacity()

返回此缓冲区的容量。

(继承自 Buffer)
Clear()

清除此缓冲区。

(继承自 Buffer)
Clone()

创建并返回此对象的副本。

(继承自 Object)
Compact()

将此缓冲区压缩   (可选操作)

CompareTo(ByteBuffer)

将此缓冲区与另一个缓冲区进行比较。

Dispose()

字节缓冲区。

(继承自 Object)
Dispose(Boolean)

字节缓冲区。

(继承自 Object)
Duplicate()

创建共享此缓冲区内容的新字节缓冲区。

Equals(Object)

指示其他某个对象是否“等于”此对象。

(继承自 Object)
Flip()

翻转此缓冲区。

(继承自 Buffer)
Get()

相对 get 方法。

Get(Byte[])

相对批量 获取 方法。

Get(Byte[], Int32, Int32)

相对批量 获取 方法。

Get(Int32)

Absolute get 方法。

GetChar(Int32)

用于读取字符值的绝对 get 方法。

GetDirectBufferAddress()

字节缓冲区。

(继承自 Buffer)
GetDouble(Int32)

用于读取双精度值的绝对 get 方法。

GetFloat(Int32)

用于读取浮点值的绝对 get 方法。

GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
GetInt(Int32)

用于读取 int 值的绝对 get 方法。

GetLong(Int32)

用于读取长值的绝对 get 方法。

GetShort(Int32)

用于读取短值的绝对 get 方法。

JavaFinalize()

当垃圾回收确定不再引用对象时,由对象上的垃圾回收器调用。

(继承自 Object)
Limit()

返回此缓冲区的限制。

(继承自 Buffer)
Limit(Int32)

设置此缓冲区的限制。

(继承自 Buffer)
Mark()

设置此缓冲区在其位置的标记。

(继承自 Buffer)
Mismatch(ByteBuffer)

查找并返回此缓冲区与给定缓冲区之间的第一个不匹配的相对索引。

Notify()

唤醒正在等待此对象的监视器的单个线程。

(继承自 Object)
NotifyAll()

唤醒正在等待此对象的监视器的所有线程。

(继承自 Object)
Order()

检索此缓冲区的字节顺序。

Order(ByteOrder)

修改此缓冲区的字节顺序。

Position()

返回此缓冲区的位置。

(继承自 Buffer)
Position(Int32)

设置此缓冲区的位置。

(继承自 Buffer)
Put(Byte[])

相对大容量 放置 方法  ) (可选操作

Put(Byte[], Int32, Int32)

相对大容量 放置 方法  ) (可选操作

Put(ByteBuffer)

相对大容量 放置 方法  ) (可选操作

Put(Int32, SByte)

absolute put 方法  ) (可选操作

Put(SByte)

相对 put 方法  ) (可选操作

PutChar(Char)

用于编写 char 值的相对 put 方法  ) (可选操作

PutChar(Int32, Char)

用于编写 char 值的绝对 put 方法  ) (可选操作

PutDouble(Double)

用于编写双精度值的相对 put 方法  ) (可选操作

PutDouble(Int32, Double)

用于编写双精度值的绝对 put 方法  ) (可选操作

PutFloat(Int32, Single)

用于编写浮点值的绝对 put 方法  ) (可选操作

PutFloat(Single)

用于编写浮点值的相对 put 方法  ) (可选操作

PutInt(Int32)

用于编写 int 值的相对 put 方法  ) (可选操作

PutInt(Int32, Int32)

用于编写 int 值的绝对 put 方法  ) (可选操作

PutLong(Int32, Int64)

用于编写长值的绝对 put 方法  ) (可选操作

PutLong(Int64)

用于编写长值的相对 put 方法  ) (可选操作

PutShort(Int16)

用于编写短值的相对 put 方法  ) (可选操作

PutShort(Int32, Int16)

用于编写短值的绝对 put 方法  ) (可选操作

Remaining()

返回当前位置与限制之间的元素数。

(继承自 Buffer)
Reset()

将此缓冲区的位置重置为以前标记的位置。

(继承自 Buffer)
Rewind()

倒带此缓冲区。

(继承自 Buffer)
SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

(继承自 Object)
Slice()

创建一个新的字节缓冲区,其内容是此缓冲区内容的共享子序列。

Slice(Int32, Int32)

创建一个新的字节缓冲区,其内容是此缓冲区内容的共享子序列。

Slice(Int32, Int32)

创建一个新缓冲区,其内容是此缓冲区内容的共享子序列。

(继承自 Buffer)
ToArray<T>()

字节缓冲区。

(继承自 Object)
ToString()

返回对象的字符串表示形式。

(继承自 Object)
UnregisterFromRuntime()

字节缓冲区。

(继承自 Object)
Wait()

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>。<>

(继承自 Object)
Wait(Int64)

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>

(继承自 Object)
Wait(Int64, Int32)

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>

(继承自 Object)
Wrap(Byte[])

将字节数组包装到缓冲区中。

Wrap(Byte[], Int32, Int32)

将字节数组包装到缓冲区中。

显式接口实现

IComparable.CompareTo(Object)

字节缓冲区。

IJavaPeerable.Disposed()

字节缓冲区。

(继承自 Object)
IJavaPeerable.DisposeUnlessReferenced()

字节缓冲区。

(继承自 Object)
IJavaPeerable.Finalized()

字节缓冲区。

(继承自 Object)
IJavaPeerable.JniManagedPeerState

字节缓冲区。

(继承自 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

字节缓冲区。

(继承自 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

字节缓冲区。

(继承自 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

字节缓冲区。

(继承自 Object)

扩展方法

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

字节缓冲区。

GetJniTypeName(IJavaPeerable)

字节缓冲区。

适用于