NIO
Buffer 一种容器,可以写入和读取基本类型数据。
Buffer 内部一般是使用数组来实现。
Buffer 基本属性:
1.position:数组的下标,下一个读取或写入操作由此下标开始,写入或读取完成后 position会增加读取或写入数据的长度,即指向新的写入或读取位置。
2.limit :数组下标,指明该下标开始,以后的数组元素不可以读取或写入。
用途:如写入了10个数组元素,limit定为10,则读取操作不可以读取超过10个元素。
3.capacity: 数组的实际长度。可保存元素的最大个数。
4.mark: 通过调用mark()方法,使mark=当前position,即记住当前位置,以便N多操作之后,通过reset()方法使position 回到之前的位置,即position = mark
以上几个属性之间的关系:
0<=mark<=position<=limit<=capacity
Buffer 的方法:
bstract Object |
array() 返回此缓冲区的底层实现数组(可选操作)。 |
abstract int |
arrayOffset() 返回此缓冲区的底层实现数组中第一个缓冲区元素的偏移量(可选操作)。 |
int |
capacity() 返回此缓冲区的容量。 |
Buffer |
clear() 清除此缓冲区。position=0,limit=capacity,mark=-1 |
Buffer |
flip() 反转此缓冲区。limit=position,position=0,mark=-1 |
abstract boolean |
hasArray() 告知此缓冲区是否具有可访问的底层实现数组。 |
boolean |
hasRemaining() 告知在当前位置和限制之间是否有元素。 |
abstract boolean |
isDirect() 告知此缓冲区是否为直接缓冲区。 |
abstract boolean |
isReadOnly() 告知此缓冲区是否为只读缓冲区。 |
int |
limit() 返回此缓冲区的限制。 |
Buffer |
limit(int newLimit) 设置此缓冲区的限制。 |
Buffer |
mark() 在此缓冲区的位置设置标记。mark = position |
int |
position() 返回此缓冲区的位置。 |
Buffer |
position(int newPosition) 设置此缓冲区的位置。 |
int |
remaining() 返回当前位置与限制之间的元素数。limit - position |
Buffer |
reset() 将此缓冲区的位置重置为以前标记的位置。position=mark,limit不变 |
Buffer |
rewind() 为重新读取缓冲区准备。 mark=-1,position=0,limit不变 |
ByteBuffer :写入或读取 byte
CharBuffer :写入或读取 char
ShortBuffer :写入或读取short
IntBuffer :写入或读取int
LongBuffer:写入或读取Long
DoubleBuffer :写入或读取double
FloatBuffer :写入或读取Float
ByteBuffer 比较常用,其方法:
ByteBuffer 是有两种实现,
1 非直接缓冲区(使用数组实现) ByteBuffer.allocate(int capacity)
2.直接缓冲区(直接对内存操作) ByteBuffer.allocateDirect(int capacity)
static ByteBuffer |
allocate(int capacity) 分配一个新的字节缓冲区。 |
static ByteBuffer |
allocateDirect(int capacity) 分配新的直接字节缓冲区。 |
byte[] |
array() 返回实现此缓冲区的 byte 数组(可选操作)。 |
int |
arrayOffset() 返回此缓冲区中的第一个元素在缓冲区的底层实现数组中的偏移量(可选操作)。 |
abstract CharBuffer |
asCharBuffer() 创建此字节缓冲区的视图,作为 char 缓冲区。 |
abstract DoubleBuffer |
asDoubleBuffer() 创建此字节缓冲区的视图,作为 double 缓冲区。 |
abstract FloatBuffer |
asFloatBuffer() 创建此字节缓冲区的视图,作为 float 缓冲区。 |
abstract IntBuffer |
asIntBuffer() 创建此字节缓冲区的视图,作为 int 缓冲区。 |
abstract LongBuffer |
asLongBuffer() 创建此字节缓冲区的视图,作为 long 缓冲区。 |
abstract ByteBuffer |
asReadOnlyBuffer() 创建共享此缓冲区内容的新的只读字节缓冲区。 |
abstract ShortBuffer |
asShortBuffer() 创建此字节缓冲区的视图,作为 short 缓冲区。 |
abstract ByteBuffer |
compact() 压缩此缓冲区(可选操作)。 |
int |
compareTo(ByteBuffer that) 将此缓冲区与另一个缓冲区进行比较。 |
abstract ByteBuffer |
duplicate() 创建共享此缓冲区内容的新的字节缓冲区。 |
boolean |
equals(Object ob) 判断此缓冲区是否与另一个对象相同。 |
abstract byte |
get() 相对 get 方法。 |
ByteBuffer |
get(byte[] dst) 相对批量 get 方法。 |
ByteBuffer |
get(byte[] dst, int offset, int length) 相对批量 get 方法。 |
abstract byte |
get(int index) 绝对 get 方法。 |
abstract char |
get基本数据类型() 用于读取 基本数据类型 值的相对 get 方法。 |
abstract char |
get基本数据类型(int index) 用于读取 基本数据类型 值的绝对 get 方法。 |
|
|
boolean |
hasArray() 判断是否可通过一个可访问的 byte 数组实现此缓冲区。 |
int |
hashCode() 返回此缓冲区的当前哈希码。 |
abstract boolean |
isDirect() 判断此字节缓冲区是否为直接的。 |
ByteOrder |
order() 获取此缓冲区的字节顺序。 |
ByteBuffer |
order(ByteOrder bo) 修改此缓冲区的字节顺序。 |
abstract ByteBuffer |
put(byte b) 相对 put 方法(可选操作)。 |
ByteBuffer |
put(byte[] src) 相对批量 put 方法(可选操作)。 |
ByteBuffer |
put(byte[] src, int offset, int length) 相对批量 put 方法(可选操作)。 |
ByteBuffer |
put(ByteBuffer src) 相对批量 put 方法(可选操作)。 |
abstract ByteBuffer |
put(int index, byte b) 绝对 put 方法(可选操作)。 |
abstract ByteBuffer |
put基本数据类型(数据类型 value) 用来写入 数据类型 值的相对 put 方法(可选操作)。 |
abstract ByteBuffer |
put基本数据类型(int index, 数据类型 value) 用于写入 数据类型 值的绝对 put 方法(可选操作)。 |
|
|
abstract ByteBuffer |
slice() 创建新的字节缓冲区,其内容是此缓冲区内容的共享子序列。 |
String |
toString() 返回汇总了此缓冲区状态的字符串。 |
static ByteBuffer |
wrap(byte[] array) 将 byte 数组包装到缓冲区中。 |
static ByteBuffer |
wrap(byte[] array, int offset, int length) 将 byte 数组包装到缓冲区中。 |
相关推荐
在Android开发中,ByteBuffer是一个非常重要的工具类,它在处理二进制数据时扮演着核心角色。ByteBuffer是Java NIO(Non-Blocking I/O)的一部分,允许开发者高效地读写大量原始字节,如处理图像、音频或网络数据。...
从网络或者存储中获取到protobuf编码的二进制数据后,可以创建一个`ByteBuffer`实例,然后调用protobuf编译器生成的类的解析方法,传入`ByteBuffer`实例进行解码。`ByteBuffer`会根据protobuf编码规则正确地读取和...
本文主要关注的是Java NIO中的ByteBuffer,一个关键的数据容器,用于在通道(Channel)和缓冲区(Buffer)之间传输数据。ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。...
使用nio byteBuffer 实现按行读取文件(大文件) 在window/linux/macOS上均测试通过 对于中文乱码也已处理成功 完整注释,可随需求更改 有问题请邮件:mly610865580@126.com
在Java编程语言中,`ByteBuffer`是Java NIO(New IO)框架中的核心类之一,它提供了一种高效处理字节数据的方式。本教程重点讲解了`ByteBuffer`的几个关键属性:mark、position、limit和capacity,以及重要的操作...
在IT行业中,ByteBuffer是一个非常重要的概念,特别是在网络通信和数据处理领域。ByteBuffer是Java平台提供的一种高效的数据操作接口,它允许我们以字节为单位进行读写操作,这对于处理二进制数据尤其有用。在...
易语言汇编版ByteBuffer源码是一个专为易语言平台设计的、用于处理网络协议数据的模块。在IT领域,ByteBuffer通常被用作一个高效的缓冲区,它可以存储和操作字节序列,尤其在处理网络通信时,能有效地组织和传输数据...
本篇将深入探讨Java NIO(非阻塞I/O)中的ByteBuffer和Mina库自定义的ByteBuffer之间的区别。 Java NIO的ByteBuffer是Java标准库提供的一个核心类,它是通道(Channel)和缓冲区(Buffer)之间数据传输的主要媒介。它...
ByteBuffer作为一个关键的类,它在NIO(New IO)包中,提供了对内存块的直接访问,使得在JNI中进行数据传输更为高效。下面将详细介绍在Android JNI中使用ByteBuffer的方法及其相关知识点。 首先,了解ByteBuffer的...
java api之ByteBuffer基础、应用场景、实战讲解 文档中有丰富的例子代码实现
在易语言中,“易语言汇编版ByteBuffer”是一个针对网络通信协议处理的重要组件。ByteBuffer的设计灵感来源于Java语言中的同名类,它的主要功能是用于在网络协议的打包和解包过程中处理二进制数据。 ByteBuffer的...
ios-byteBuffer [![CI状态]( Lee / ios-byteBuffer.svg?style = flat)]( Lee / ios-byteBuffer ) 用法 #分配 ByteBuffer *buffer = [ByteBuffer initWithOrder: ByteOrderLittleEndian]; #输入数据 - ( ...
ByteBuffer buffer = ByteBuffer.allocateDirect(MyStruct.SIZE); // SIZE应为结构体的字节大小 buffer.order(ByteOrder.BIG_ENDIAN); // 与发送端保持一致的字节序 inputStream.read(buffer.array()); MyStruct ...
jdk api-ServerSocketChannel、Selector、ByteBuffer结合实现网络报文间的通讯
主要解决从流中获取数据,缓存,拆解,可用于TCP粘包问题
3. **bytebuffer.js**:ByteBuffer是一个二进制缓冲区的实现,类似于Java的ByteBuffer类。在protobuf中,数据是以二进制形式存储和传输的,bytebuffer.js提供了读写二进制数据的能力,这对于处理protobuf序列化的...
《深入解析dena-bytebuffer:JavaScript中的高效二进制数据处理》 在JavaScript的世界里,处理二进制数据是一项常见的任务,特别是在网络通信、游戏开发、图像处理等领域。`dena-bytebuffer`库就是为了解决这个问题...
标题中的“ByteBuffer-scanner-Memor-Hex”很可能是一个关于Java编程中的内存处理和数据解析的项目或库。ByteBuffer是Java标准库中的一个关键类,主要用于处理二进制数据,尤其是在网络通信、文件读写以及内存操作等...