`

ByteBuffer

 
阅读更多

 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 数组包装到缓冲区中。

 

 

 

 


 

  • 大小: 61.5 KB
分享到:
评论

相关推荐

    Android中的ByteBuffer解析

    在Android开发中,ByteBuffer是一个非常重要的工具类,它在处理二进制数据时扮演着核心角色。ByteBuffer是Java NIO(Non-Blocking I/O)的一部分,允许开发者高效地读写大量原始字节,如处理图像、音频或网络数据。...

    protobuf+long+bytebuffer

    从网络或者存储中获取到protobuf编码的二进制数据后,可以创建一个`ByteBuffer`实例,然后调用protobuf编译器生成的类的解析方法,传入`ByteBuffer`实例进行解码。`ByteBuffer`会根据protobuf编码规则正确地读取和...

    Java NIO学习笔记——ByteBuffer用法

    本文主要关注的是Java NIO中的ByteBuffer,一个关键的数据容器,用于在通道(Channel)和缓冲区(Buffer)之间传输数据。ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。...

    NIO(byteBuffer)按行读取文件

    使用nio byteBuffer 实现按行读取文件(大文件) 在window/linux/macOS上均测试通过 对于中文乱码也已处理成功 完整注释,可随需求更改 有问题请邮件:mly610865580@126.com

    【IT十八掌徐培成】Java基础第26天-05.ByteBuffer-mark-pos-limit-cap-flip.zip

    在Java编程语言中,`ByteBuffer`是Java NIO(New IO)框架中的核心类之一,它提供了一种高效处理字节数据的方式。本教程重点讲解了`ByteBuffer`的几个关键属性:mark、position、limit和capacity,以及重要的操作...

    ByteBuffer.zip

    在IT行业中,ByteBuffer是一个非常重要的概念,特别是在网络通信和数据处理领域。ByteBuffer是Java平台提供的一种高效的数据操作接口,它允许我们以字节为单位进行读写操作,这对于处理二进制数据尤其有用。在...

    易语言汇编版ByteBuffer源码

    易语言汇编版ByteBuffer源码是一个专为易语言平台设计的、用于处理网络协议数据的模块。在IT领域,ByteBuffer通常被用作一个高效的缓冲区,它可以存储和操作字节序列,尤其在处理网络通信时,能有效地组织和传输数据...

    深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别

    本篇将深入探讨Java NIO(非阻塞I/O)中的ByteBuffer和Mina库自定义的ByteBuffer之间的区别。 Java NIO的ByteBuffer是Java标准库提供的一个核心类,它是通道(Channel)和缓冲区(Buffer)之间数据传输的主要媒介。它...

    Android在JNI中使用ByteBuffer的方法

    ByteBuffer作为一个关键的类,它在NIO(New IO)包中,提供了对内存块的直接访问,使得在JNI中进行数据传输更为高效。下面将详细介绍在Android JNI中使用ByteBuffer的方法及其相关知识点。 首先,了解ByteBuffer的...

    java api之ByteBuffer基础、应用场景、实战讲解

    java api之ByteBuffer基础、应用场景、实战讲解 文档中有丰富的例子代码实现

    易语言-易语言汇编版ByteBuffer

    在易语言中,“易语言汇编版ByteBuffer”是一个针对网络通信协议处理的重要组件。ByteBuffer的设计灵感来源于Java语言中的同名类,它的主要功能是用于在网络协议的打包和解包过程中处理二进制数据。 ByteBuffer的...

    ios-byteBuffer:在objective-c中重写一个类

    ios-byteBuffer [![CI状态]( Lee / ios-byteBuffer.svg?style = flat)]( Lee / ios-byteBuffer ) 用法 #分配 ByteBuffer *buffer = [ByteBuffer initWithOrder: ByteOrderLittleEndian]; #输入数据 - ( ...

    Android/Java基于Socket接收结构体数据

    ByteBuffer buffer = ByteBuffer.allocateDirect(MyStruct.SIZE); // SIZE应为结构体的字节大小 buffer.order(ByteOrder.BIG_ENDIAN); // 与发送端保持一致的字节序 inputStream.read(buffer.array()); MyStruct ...

    jdk api-ServerSocketChannel、Selector、ByteBuffer结合实现网络报文间的通讯

    jdk api-ServerSocketChannel、Selector、ByteBuffer结合实现网络报文间的通讯

    ByteBuffer.cs

    主要解决从流中获取数据,缓存,拆解,可用于TCP粘包问题

    protobuf.js

    3. **bytebuffer.js**:ByteBuffer是一个二进制缓冲区的实现,类似于Java的ByteBuffer类。在protobuf中,数据是以二进制形式存储和传输的,bytebuffer.js提供了读写二进制数据的能力,这对于处理protobuf序列化的...

    dena-bytebuffer:dena-bytebuffer

    《深入解析dena-bytebuffer:JavaScript中的高效二进制数据处理》 在JavaScript的世界里,处理二进制数据是一项常见的任务,特别是在网络通信、游戏开发、图像处理等领域。`dena-bytebuffer`库就是为了解决这个问题...

    ByteBuffer-scanner-Memor-Hex:出色地

    标题中的“ByteBuffer-scanner-Memor-Hex”很可能是一个关于Java编程中的内存处理和数据解析的项目或库。ByteBuffer是Java标准库中的一个关键类,主要用于处理二进制数据,尤其是在网络通信、文件读写以及内存操作等...

Global site tag (gtag.js) - Google Analytics