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>
此类的每个子类定义 两个获取 和 放置 操作类别:
<blockquote>
相对 操作从当前位置开始读取或写入一个或多个元素,然后通过传输的元素数递增位置。 如果请求的传输超出限制,则相对 get 操作会引发一个 BufferUnderflowException ,而相对 放置 操作将引发一个 BufferOverflowException;在任一情况下,不会传输任何数据。
绝对 操作采用显式元素索引,不会影响位置。 如果索引参数超出限制,则绝对 获取 和 放置 操作将引发 IndexOutOfBoundsException 。
</blockquote>
当然,数据也可以由相应通道的 I/O 操作传入或传出缓冲区,这些操作始终相对于当前位置。
<h2> 标记和重置 </h2>
缓冲区的 标记 是调用方法时将重置其位置的 #reset reset 索引。 标记并非始终定义,但在定义标记时,它永远不会为负,并且永远不会大于位置。 如果定义了标记,则在将位置或限制调整为小于标记的值时,将放弃标记。 如果未定义标记,则调用 #reset reset 该方法会导致 InvalidMarkException 引发。
<h2> 固定器 </h2>
以下固定保留标记、位置、限制和容量值:
<blockquote><=0标记<=位置<=限制<=容量</blockquote>
新创建的缓冲区始终具有零的位置和未定义的标记。 初始限制可以是零,也可能是一些其他值,具体取决于缓冲区的类型及其构造方式。 新分配的缓冲区的每个元素初始化为零。
<h2> 其他操作 </h2>
除了访问位置、限制和容量值以及标记和重置的方法外,此类还在缓冲区上定义以下操作:
<ul>
<li>
#clear 将缓冲区设置为新的通道读取或相对 放置 操作序列:它将容量限制和位置设置为零。
</li>
<li>
#flip 将缓冲区设置为新的通道写入或相对 获取 操作序列:它将限制设置为当前位置,然后将位置设置为零。
</li>
<li>
#rewind 使缓冲区准备好重新读取它已包含的数据:它将保留限制不变,并将位置设置为零。
</li>
<li>
和#slice#slice(int,int) slice(index,length)方法创建缓冲区的子序列:它们保留限制和位置不变。
</li>
<li>
#duplicate 创建缓冲区的浅表副本:它会保留限制和位置不变。
</li>
</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, Int32) |
使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted>/em<>,或直到经过一定数量的实时。 (继承自 Object) |
| Wait(Int64) |
使当前线程等待直到唤醒,通常是通过 <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) |
扩展方法
| 名称 | 说明 |
|---|---|
| GetJniTypeName(IJavaPeerable) |
获取实例 |
| JavaAs<TResult>(IJavaPeerable) |
尝试强制 |
| JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
| JavaCast<TResult>(IJavaObject) |
特定基元类型的数据的容器。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
尝试强制 |