Buffer 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
特定基元类型的数据的容器。
[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
- 继承
- 派生
- 属性
注解
特定基元类型的数据的容器。
缓冲区是特定基元类型的元素的线性有限序列。 除了内容之外,缓冲区的基本属性是其容量、限制和位置:
<blockquote>
缓冲区的 容量 是它包含的元素数。 缓冲区的容量从不为负,也永远不会更改。
缓冲区 的限制 是不应读取或写入的第一个元素的索引。 缓冲区的限制从不为负,也永远不会大于其容量。
缓冲区 的位置 是下一个要读取或写入的元素的索引。 缓冲区的位置从不为负,也永远不会超过其限制。
</blockquote>
对于每个非布尔基元类型,此类都有一个子类。
<h2> 传输数据 </h2>
此类的每个子类定义两个类别的 get 和 put 操作:
<blockquote>
相对 操作从当前位置开始读取或写入一个或多个元素,然后按传输的元素数递增位置。 如果请求的传输超出限制,则相对 获取 操作将 BufferUnderflowException
引发 ,相对 放置 操作引发 BufferOverflowException
;在任一情况下,不传输任何数据。
绝对 运算采用显式元素索引,不会影响位置。 如果索引参数超过限制,绝对 get 和 put 操作将引发 IndexOutOfBoundsException
。
</blockquote>
当然,数据也可以通过适当通道的 I/O 操作传入或传出缓冲区,这些操作始终相对于当前位置。
<h2> 标记和重置 </h2>
缓冲区 标记是 调用 方法时,其位置将重置到的 #reset reset
索引。 标记并不总是定义,但当它被定义时,它永远不会是负的,也永远不会大于位置。 如果定义了标记,则当位置或限制调整为小于标记的值时,将放弃该标记。 如果未定义标记,则调用 #reset reset
方法会导致 InvalidMarkException
引发 。
<h2> 固定变量 </h2>
以下固定值适用于标记、位置、限制和容量值:
<blockquote><=
0
标记<=
位置<=
限制<=
容量</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 中添加。
此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。
构造函数
Buffer(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
属性
Class |
返回此 |
Handle |
基础 Android 实例的句柄。 (继承自 Object) |
HasArray |
如果 |
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) |
特定基元类型的数据的容器。 |