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> Direct 非直接缓冲区 </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>

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

“views”>

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

视图缓冲区在类型特定的 get 系列和 放置 方法方面具有三个重要优势:

<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 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

构造函数

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)

绝对 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)

Relative put 方法  (可选操作)

PutChar(Char)

用于编写 char 值 put 方法; (可选操作)

PutChar(Int32, Char)

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

PutDouble(Double)

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

PutDouble(Int32, Double)

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

PutFloat(Int32, Single)

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

PutFloat(Single)

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

PutInt(Int32)

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

PutInt(Int32, Int32)

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

PutLong(Int32, Int64)

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

PutLong(Int64)

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

PutShort(Int16)

用于编写短值 put 方法; (可选操作)

PutShort(Int32, Int16)

用于编写短值 nbsp 的绝对 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)

字节缓冲区。

适用于