Buffer 类

定义

特定基元类型的数据的容器。

[Android.Runtime.Register("java/nio/Buffer", DoNotGenerateAcw=true)]
public abstract class Buffer : Java.Lang.Object
[<Android.Runtime.Register("java/nio/Buffer", DoNotGenerateAcw=true)>]
type Buffer = class
    inherit Object
继承
Buffer
派生
属性

注解

特定基元类型的数据的容器。

缓冲区是特定基元类型的元素的线性有限序列。 除了内容之外,缓冲区的基本属性是其容量、限制和位置:

<blockquote>

缓冲区的 容量 是它包含的元素数。 缓冲区的容量从不为负,也永远不会更改。

缓冲区 的限制 是不应读取或写入的第一个元素的索引。 缓冲区的限制从不为负,也永远不会大于其容量。

缓冲区 的位置 是下一个要读取或写入的元素的索引。 缓冲区的位置从不为负,也永远不会超过其限制。

</blockquote>

对于每个非布尔基元类型,此类都有一个子类。

<h2> 传输数据 </h2>

此类的每个子类定义两个类别的 getput 操作:

<blockquote>

相对 操作从当前位置开始读取或写入一个或多个元素,然后按传输的元素数递增位置。 如果请求的传输超出限制,则相对 获取 操作将 BufferUnderflowException 引发 ,相对 放置 操作引发 BufferOverflowException;在任一情况下,不传输任何数据。

绝对 运算采用显式元素索引,不会影响位置。 如果索引参数超过限制,绝对 getput 操作将引发 IndexOutOfBoundsException

</blockquote>

当然,数据也可以通过适当通道的 I/O 操作传入或传出缓冲区,这些操作始终相对于当前位置。

<h2> 标记和重置 </h2>

缓冲区 标记是 调用 方法时,其位置将重置到的 #reset reset 索引。 标记并不总是定义,但当它被定义时,它永远不会是负的,也永远不会大于位置。 如果定义了标记,则当位置或限制调整为小于标记的值时,将放弃该标记。 如果未定义标记,则调用 #reset reset 方法会导致 InvalidMarkException 引发 。

<h2> 固定变量 </h2>

以下固定值适用于标记、位置、限制和容量值:

<blockquote>&lt;=0标记&lt;=位置&lt;=限制&lt;=容量</blockquote>

新创建的缓冲区的位置始终为零,标记未定义。 初始限制可以是零,也可能是其他一些值,具体取决于缓冲区的类型和构造缓冲区的方式。 新分配的缓冲区的每个元素都初始化为零。

<h2> 清除、翻转和倒带 </h2>

除了用于访问位置、限制和容量值以及用于标记和重置的方法外,此类还定义了缓冲区上的以下操作:

<ul>

<李>

#clear 使缓冲区准备好用于新的通道读取或相对 放置 操作序列:它将限制设置为容量,将位置设置为零。

</李>

<李>

#flip 使缓冲区准备好用于新的通道写入或相对 获取 操作序列:它将限制设置为当前位置,然后将位置设置为零。

</李>

<李>

#rewind 使缓冲区准备好重新读取它已包含的数据:它将保持限制不变,并将位置设置为零。

</李>

</ul>

<h2> 只读缓冲区 </h2>

每个缓冲区都是可读的,但并非每个缓冲区都是可写的。 每个缓冲区类的突变方法都指定为 可选操作 ,在对只读缓冲区调用时,这些操作将引发 ReadOnlyBufferException 。 只读缓冲区不允许更改其内容,但其标记、位置和限制值是可变的。 缓冲区是否为只读可以通过调用其 #isReadOnly isReadOnly 方法来确定。

<h2> 线程安全 </h2>

多个并发线程不安全地使用缓冲区。 如果缓冲区由多个线程使用,则应通过适当的同步来控制对缓冲区的访问。

<h2> 调用链接 </h2>

此类中没有要返回的值的方法被指定为返回调用它们的缓冲区。 这允许链接方法调用;例如,语句序列

<blockquote>

b.flip();
            b.position(23);
            b.limit(42);

</blockquote>

可以替换为单个更简洁的语句

<blockquote>

b.flip().position(23).limit(42);

</blockquote>

在 1.4 中添加。

java.nio.BufferJava 文档。

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

构造函数

Buffer(IntPtr, JniHandleOwnership)

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

属性

Class

返回此 Object的运行时类。

(继承自 Object)
Handle

基础 Android 实例的句柄。

(继承自 Object)
HasArray

如果 array 和 不会引发, arrayOffset 则返回 true。

HasRemaining

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

IsDirect

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

IsReadOnly

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

JniIdentityHashCode

特定基元类型的数据的容器。

(继承自 Object)
JniPeerMembers

特定基元类型的数据的容器。

PeerReference

特定基元类型的数据的容器。

(继承自 Object)
ThresholdClass

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

ThresholdType

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

方法

ArrayOffset()

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

Capacity()

返回此缓冲区的容量。

Clear()

清除此缓冲区。

Clone()

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

(继承自 Object)
Dispose()

特定基元类型的数据的容器。

(继承自 Object)
Dispose(Boolean)

特定基元类型的数据的容器。

(继承自 Object)
Duplicate()

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

Equals(Object)

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

(继承自 Object)
Flip()

翻转此缓冲区。

GetDirectBufferAddress()

特定基元类型的数据的容器。

GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
JavaFinalize()

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

(继承自 Object)
Limit()

返回此缓冲区的限制。

Limit(Int32)

设置此缓冲区的限制。

Mark()

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

Notify()

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

(继承自 Object)
NotifyAll()

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

(继承自 Object)
Position()

返回此缓冲区的位置。

Position(Int32)

设置此缓冲区的位置。

Remaining()

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

Reset()

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

Rewind()

回退此缓冲区。

SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

(继承自 Object)
Slice()

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

Slice(Int32, Int32)

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

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)

显式接口实现

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)

特定基元类型的数据的容器。

适用于