droid_wrap::java::nio

Struct ByteBuffer

Source
pub struct ByteBuffer { /* private fields */ }
Expand description

字节缓冲区。此类定义了六类针对字节缓冲区的操作:

  • 绝对和相对获取和放置方法,用于读取和写入单个字节;
  • 相对批量获取方法,用于将连续的字节序列从此缓冲区传输到数组;
  • 相对批量放置方法,用于将连续的字节序列从字节数组或其他字节缓冲区传输到此缓冲区;
  • 绝对和相对获取和放置方法,用于读取和写入其他原始类型的值,并将它们转换为特定字节顺序的字节序列;
  • 创建视图缓冲区的方法,允许将字节缓冲区视为包含其他原始类型值的缓冲区;以及压缩、复制和切片字节缓冲区的方法。 字节缓冲区可以通过分配(为缓冲区的内容分配空间)或将现有字节数组包装到缓冲区中来创建。

直接与非直接缓冲区 字节缓冲区可以是直接的,也可以是非直接的。给定一个直接字节缓冲区,Java 虚拟机将尽最大努力直接在其上执行本机 I/O 操作。也就是说,它将尝试避免在每次调用底层操作系统的本机 I/O 操作之前(或之后)将缓冲区的内容复制到中间缓冲区(或从中间缓冲区复制)。 可以通过调用此类的 allocateDirect 工厂方法来创建直接字节缓冲区。此方法返回的缓冲区的分配和释放成本通常比非直接缓冲区略高。直接缓冲区的内容可能位于正常垃圾收集堆之外,因此它们对应用程序内存占用的影响可能不明显。因此,建议主要为受底层系统本机 I/O 操作影响的大型、长寿命缓冲区分配直接缓冲区。 通常,最好仅在直接缓冲区对程序性能产生可衡量的增益时才分配直接缓冲区。也可以通过将文件区域直接映射到内存中来创建直接字节缓冲区。 Java 平台的实现可以选择支持通过 JNI 从本机代码创建直接字节缓冲区。如果这些类型的缓冲区之一的实例引用了不可访问的内存区域,则尝试访问该区域将不会更改缓冲区的内容,并且会导致在访问时或稍后抛出未指定的异常。 可以通过调用其 isDirect 方法来确定字节缓冲区是直接的还是非直接的。提供此方法是为了在性能关键型代码中进行显式缓冲区管理。

访问二进制数据 此类定义了用于读取和写入除布尔值之外的所有其他原始类型的值的方法。原始值根据缓冲区的当前字节顺序转换为(或从)字节序列,可以通过 order 方法检索和修改字节序列。特定字节顺序由 ByteOrder 类的实例表示。字节缓冲区的初始顺序始终是 BIG_ENDIAN。 对于访问异构二进制数据(即不同类型的值序列),此类为每种类型定义了一系列绝对和相对地获取和放置方法。例如,对于 32 位浮点值,此类定义: float getFloat() float getFloat(int index) void putFloat(float f) void putFloat(int index, float f) char、short、int、long 和 double 类型定义了相应的方法。绝对获取和放置方法的索引参数以字节为单位,而不是以读取或写入的类型为单位。对于访问同质二进制数据(即相同类型的值序列),此类定义了可以创建给定字节缓冲区视图的方法。 视图缓冲区只是另一个缓冲区,其内容由字节缓冲区支持。对字节缓冲区内容的更改将在视图缓冲区中可见,反之亦然;两个缓冲区的位置、限制和标记值是独立的。例如,asFloatBuffer 方法创建 FloatBuffer 类的一个实例,该实例由调用该方法的字节缓冲区支持。为 char、short、int、long 和 double 类型定义了相应的视图创建方法。 与上述类型特定的 get 和 put 方法系列相比,视图缓冲区具有三个重要优势:

  • 视图缓冲区不是按字节进行索引,而是按其值的类型特定大小进行索引;
  • 视图缓冲区提供相对批量的 get 和 put 方法,可以在缓冲区和数组或相同类型的其他缓冲区之间传输连续的值序列;
  • 视图缓冲区可能更高效,因为当且仅当其支持字节缓冲区是直接的时,它才是直接的。视图缓冲区的字节顺序固定为其创建视图时的字节缓冲区的字节顺序。

调用链 此类中没有返回值的方法被指定为返回调用它们的缓冲区。这允许方法调用链。语句序列 bb.putInt(0xCAFEBABE); bb.putShort(3); bb.putShort(45); 例如,可以用单个语句代替: bb.putInt(0xCAFEBABE).putShort(3).putShort(45);

Methods from Deref<Target = GlobalRef>§

Source

pub fn as_obj(&self) -> &JObject<'static>

Get the object from the global ref

This borrows the ref and prevents it from being dropped as long as the JObject sticks around.

Methods from Deref<Target = JObject<'static>>§

Source

pub fn as_raw(&self) -> *mut _jobject

Returns the raw JNI pointer.

Trait Implementations§

Source§

impl Debug for ByteBuffer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for ByteBuffer

Source§

type Target = GlobalRef

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl From<&GlobalRef> for ByteBuffer

Source§

fn from(obj: &GlobalRef) -> Self

Converts to this type from the input type.
Source§

impl Into<GlobalRef> for &ByteBuffer

Source§

fn into(self) -> GlobalRef

Converts this type into the (usually inferred) input type.
Source§

impl JObjNew for ByteBuffer

Source§

type Fields = ()

字段类型
Source§

fn _new(this: &GlobalRef, fields: Self::Fields) -> Self

从java对象创建本地对象。 this java对象引用。
Source§

fn null() -> Self
where Self: Sized, Self::Fields: Default,

创建空对象。
Source§

impl JObjRef for ByteBuffer

Source§

fn java_ref(&self) -> GlobalRef

获取java对象引用。
Source§

impl JType for ByteBuffer

Source§

const CLASS: &'static str = "java/nio/ByteBuffer"

java类的名称。
Source§

const OBJECT_SIG: &'static str = "Ljava/nio/ByteBuffer;"

对象的签名描述。
Source§

type Error = Error

错误类型。
Source§

const DIM: u8 = 0u8

数组维度,0表示不是数组
Source§

impl PartialEq for ByteBuffer

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl ToString for ByteBuffer

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.