五、ByteBuffer双向通道

5. ByteBuffer双向通道

5.1 使用类

org.voovan.tools.ByteBufferChannel

5.1 方法说明

5.1.1 构造方法
  1. public ByteBufferChannel(int size)
  2. public ByteBufferChannel()
  • size: 目标缓冲区的大小。
  • 返回值: 移除第一个字节后的字符串。

5.1.2 当前数组空闲的大小
  1. public int free()
  • 返回值: 当前数组空闲的大小。

5.1.3 返回当前分配的数组大小
  1. public int capacity()
  • 返回值: 当前分配的数组大小。

5.1.4 当前数据大小
  1. public int size()
  • 返回值: 数据大小。

5.1.5 获取缓冲区有效字节数组的一个拷贝
  1. public int array()

修改这个数组将不会影响当前对象,返回 0 到 size 的有效数据

  • 返回值: 缓冲区有效字节数组。

5.1.6 获取缓冲区
  1. public ByteBuffer getByteBuffer()

返回 0 到 size 的有效数据 修改这个数组将不会影响当前对象 数据随时会变化,使用后下次使用建议重新获取,否则可能导致数据不全

  • 返回值: ByteBuffer 对象。

5.1.7 释放内存
  1. public void release()

5.1.8 收缩通道
  1. public void compact()

将通过getByteBuffer()方法获得 ByteBuffer 对象的操作同步到 ByteBufferChannel如果不需要同步,则不用调用这个方法如果之前最后一次通过getByteBuffer()方法获得过 ByteBuffer,则使用这个 Byte 来收缩通道将 (position 到 limit) 之间的数据 移动到 (0 到 limit - position) 其他情形将不做任何操作所以 建议 getByteBuffer() 和 compact() 成对操作


5.1.9 缓冲区头部写入
  1. public int writeEnd(ByteBuffer src)
  • 返回值: 需要写入的缓冲区 ByteBuffer 对象。
  • 返回值: 写入的数据大小。

5.1.10 缓冲区尾部写入
  1. public int writeHead(ByteBuffer src)
  • 返回值: 需要写入的缓冲区 ByteBuffer 对象。
  • 返回值: 写入的数据大小。

5.1.11 从缓冲区尾部读取数据
  1. public int readHead(ByteBuffer dst)
  • 返回值: 需要读入数据的缓冲区ByteBuffer 对象。
  • 返回值: 读出的数据大小。

5.1.12 从缓冲区头部读取数据
  1. public int readEnd(ByteBuffer dst)
  • 返回值: 需要读入数据的缓冲区ByteBuffer 对象。
  • 返回值: 读出的数据大小。

5.1.13 从缓冲区头部读取数据
  1. public boolean shrink(int shrinkSize)
  • shrinkSize: 收缩的偏移量, 大于0,从尾部收缩数据,小于0 从头部收缩数据。
  • *返回值:true: 成功, false: 失败。

5.1.14 从缓冲区头部读取数据
  1. public byte get(int offset) throws IndexOutOfBoundsException
  • 获取某个偏移量位置的 byte 数据 该操作不会导致通道内的数据发生变化
  • offset: 偏移量的位置。
  • *返回值: 数据。

5.1.15 从缓冲区头部读取数据
  1. public int get(int offset,
  2. byte[] dst,
  3. int length)
  • 获取某个偏移量位置的 byte 数据数组 该操作不会导致通道内的数据发生变化
  • offset: 偏移量。
  • dst: 目标数组。
  • length: 长度。
  • *返回值: 获取数据的长度。

5.1.16 从缓冲区头部读取数据
  1. public int get(byte[] dst)
  • 获取某个偏移量位置的 byte 数据数组 该操作不会导致通道内的数据发生变化
  • dst: 目标数组。
  • *返回值: 获取数据的长度。

5.1.17 从缓冲区头部读取数据
  1. public boolean waitData(int length, int timeout)
  • 等待期望的数据长度
  • length: 期望的数据长度
  • timeout: 超时时间,单位: 秒
  • *返回值: true: 具备期望长度的数据, false: 等待数据超时。

5.1.18 等待收到期望的数据
  1. public boolean waitData(byte[] mark, int timeout)
  • 等待期望的数据长度
  • mark: 期望出现的数据
  • timeout: 超时时间,单位: 秒
  • *返回值: true: 具备期的数据, false: 等待数据超时。

5.1.19 缓冲区某个位置写入数据
  1. public int write(int writePosition, ByteBuffer src)
  • writePosition: 缓冲区中的位置
  • src: 需要写入的缓冲区 ByteBuffer 对象
  • *返回值: 写入的数据大小。

5.1.20 重新分配的空间大小
  1. public boolean reallocate(int newSize)
  • newSize: 重新分配的空间大小
  • *返回值: true:成功, false:失败。

5.1.21 从缓冲区某个位置开始读取数据
  1. public int read(int readPosition, ByteBuffer dst)
  • readPosition: 缓冲区中的位置
  • dst: 需要读入数据的缓冲区ByteBuffer 对象
  • *返回值: 读出的数据大小。

5.1.22 查找特定 byte 标识的位置
  1. public int indexOf(byte[] mark)
  • byte 标识数组第一个字节的索引位置
  • mark: byte 标识数组
  • *返回值: 第一个字节的索引位置。

5.1.23 读取一行
  1. public String readLine()
  • *返回值: 字符串。

5.1.24 读取一段,使用 byte数组 分割
  1. public ByteBuffer readWithSplit(byte[] splitByte)
  • 返回的 byte数组中不包含分割 byte 数组的内容
  • mark: 分割字节数组
  • timeout: 超时时间,单位: 秒
  • *返回值: 字节数组。

5.1.25 保存到文件
  1. public void saveToFile(String filePath, long length)
  • filePath: 文件路径
  • length: 需要保存的长度
  • *返回值: 字节数组。