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>

此类的每个子类定义 两个获取放置 操作类别:

<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 中添加。

Java文档java.nio.Buffer

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

构造函数

名称 说明
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, 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)

获取实例 self类型的 JNI 名称。

JavaAs<TResult>(IJavaPeerable)

尝试强制self键入TResult,检查强制是否在Java端有效。

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

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

TryJavaCast<TResult>(IJavaPeerable, TResult)

尝试强制self键入TResult,检查强制是否在Java端有效。

适用于