• 五、ByteBuffer双向通道
    • 5. ByteBuffer双向通道
    • 5.1 使用类
    • 5.1 方法说明
      • 5.1.1 构造方法
      • 5.1.2 当前数组空闲的大小
      • 5.1.3 返回当前分配的数组大小
      • 5.1.4 当前数据大小
      • 5.1.5 获取缓冲区有效字节数组的一个拷贝
      • 5.1.6 获取缓冲区
      • 5.1.7 释放内存
      • 5.1.8 收缩通道
      • 5.1.9 缓冲区头部写入
      • 5.1.10 缓冲区尾部写入
      • 5.1.11 从缓冲区尾部读取数据
      • 5.1.12 从缓冲区头部读取数据
      • 5.1.13 从缓冲区头部读取数据
      • 5.1.14 从缓冲区头部读取数据
      • 5.1.15 从缓冲区头部读取数据
      • 5.1.16 从缓冲区头部读取数据
      • 5.1.17 从缓冲区头部读取数据
      • 5.1.18 等待收到期望的数据
      • 5.1.19 缓冲区某个位置写入数据
      • 5.1.20 重新分配的空间大小
      • 5.1.21 从缓冲区某个位置开始读取数据
      • 5.1.22 查找特定 byte 标识的位置
      • 5.1.23 读取一行
      • 5.1.24 读取一段,使用 byte数组 分割
      • 5.1.25 保存到文件

    五、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: 需要保存的长度
    • *返回值: 字节数组。