public class ByteBufferChannel extends Object
Constructor and Description |
---|
ByteBufferChannel()
构造函数
|
ByteBufferChannel(ByteBuffer byteBuffer)
构造函数
|
ByteBufferChannel(int capacity)
构造函数
|
ByteBufferChannel(int capacity,
Integer maxSize)
构造函数
|
Modifier and Type | Method and Description |
---|---|
byte[] |
array()
获取缓冲区有效字节数组的一个拷贝
修改这个数组将不会影响当前对象
返回 0 到 size 的有效数据
从堆外复制到堆内
|
int |
available()
当前数组空闲的大小
|
int |
capacity()
返回当前分配的容量
|
void |
clear()
清空通道
|
boolean |
compact()
收缩通道
将通过 getByteBuffer() 方法获得 ByteBuffer 对象的操作同步到 ByteBufferChannel
如果之前最后一次通过 getByteBuffer() 方法获得过 ByteBuffer,则使用这个 ByteBuffer 来收缩通道
将 (position 到 limit) 之间的数据 移动到 (0 到 limit - position) 其他情形将不做任何操作
所以 必须 getByteBuffer() 和 compact() 成对操作
|
String |
content()
获取内容
|
int |
get(byte[] dst)
获取某个偏移量位置的 byte 数据数组
该操作不会导致通道内的数据发生变化
|
int |
get(byte[] dst,
int position,
int length)
获取某个位置的 byte 数据数组
该操作不会导致通道内的数据发生变化
|
int |
get(ByteBuffer srcByteBuffer)
读取数据到 srcByteBuffer
|
byte |
get(int position)
获取某个位置的 byte 数据
该操作不会导致通道内的数据发生变化
|
ByteBuffer |
getByteBuffer()
获取缓冲区
返回 0 到 size 的有效数据
为了保证数据一致性, 这里会加锁
在调用getByteBuffer()方法后,跨线程的读写操作都会被阻塞.
|
int |
getMaxSize() |
int |
indexOf(byte[] mark)
查找特定 byte 标识的位置
byte 标识数组第一个字节的索引位置
|
void |
init(ByteBuffer byteBuffer)
初始化函数
|
boolean |
isEmpty()
缓冲通道是否空
|
boolean |
isFull()
缓冲通道是否已满
|
boolean |
isReleased()
是否已经释放
|
boolean |
isThreadSafe()
获取是否是线程安全的
|
void |
lock() |
ByteBuffer |
newBuffer()
更换内部的 ByteBuffer 为新的 ByteBuffer
|
int |
read(int readPosition,
ByteBuffer dst)
从缓冲区某个位置开始读取数据
|
int |
readEnd(ByteBuffer dst)
从缓冲区尾部读取数据
|
int |
readHead(ByteBuffer dst)
从缓冲区头部读取数据
|
String |
readLine()
读取一行
|
ByteBuffer |
readWithSplit(byte[] splitByte)
读取一段,使用 byte数组 分割
返回的 byte数组中不包含分割 byte 数组的内容
|
boolean |
reallocate(int newSize)
重新分配内存空间的大小
|
void |
release()
立刻释放内存
|
void |
saveToFile(String filePath,
long length)
保存到文件
|
void |
setMaxSize(int maxSize) |
void |
setThreadSafe(boolean threadSafe)
设置是否启用线程安全模式
|
boolean |
shrink(int shrinkSize)
收缩通道内的数据
|
boolean |
shrink(int shrinkPosition,
int shrinkSize)
从某一个偏移量位置开始收缩数据
|
int |
size()
当前数据大小
|
ByteBuffer |
slice(int size)
获取 bytebuffer 的 hashcode
|
boolean |
startWith(byte[] mark) |
String |
toString() |
void |
unlock() |
boolean |
waitData(byte[] mark,
int timeout,
Runnable supplier)
从头部开始判断是否收到期望的数据
|
boolean |
waitData(int length,
int timeout,
Runnable supplier)
等待期望的数据长度
|
int |
write(int writePosition,
byte[] srcBytes,
int offset,
int length)
缓冲区某个位置写入数据
|
int |
write(int writePosition,
ByteBuffer src)
缓冲区某个位置写入数据
|
int |
writeEnd(byte[] srcBytes,
int offset,
int length)
缓冲区头部写入
|
int |
writeEnd(ByteBuffer src)
缓冲区头部写入
|
int |
writeHead(byte[] srcBytes,
int offset,
int length)
缓冲区尾部写入
|
int |
writeHead(ByteBuffer src)
缓冲区尾部写入
|
public ByteBufferChannel(int capacity)
capacity
- 初始分配的容量, 会自动扩容 maxSize 的大小, 如果容量不够抛出异常public ByteBufferChannel(int capacity, Integer maxSize)
capacity
- 初始分配的容量, 会自动扩容 maxSize 的大小, 如果容量不够抛出异常maxSize
- 通道地最大容量public ByteBufferChannel(ByteBuffer byteBuffer)
byteBuffer
- 初始分配的容量, 会自动扩容 maxSize 的大小, 如果容量不够抛出异常public ByteBufferChannel()
public ByteBuffer newBuffer()
public void init(ByteBuffer byteBuffer)
byteBuffer
- 初始化用的 ByteBufferpublic int getMaxSize()
public void setMaxSize(int maxSize)
public boolean isThreadSafe()
public void setThreadSafe(boolean threadSafe)
threadSafe
- true: 启用线程安全, false: 不启用线程安全public void lock()
public void unlock()
public boolean isFull()
public boolean isEmpty()
public boolean isReleased()
public void release()
public int available()
public int capacity()
public int size()
public byte[] array()
public void clear()
public boolean shrink(int shrinkPosition, int shrinkSize)
shrinkPosition
- 收缩的偏移量位置shrinkSize
- 收缩的数据大小, 大于0: 向尾部收缩, 小于0: 向头部收缩public boolean shrink(int shrinkSize)
shrinkSize
- 收缩的偏移量: 大于0: 从头部向尾部收缩数据, 小于0: 从尾部向头部收缩数据public ByteBuffer slice(int size)
size
- slice 的数据大小public ByteBuffer getByteBuffer()
public boolean compact()
public byte get(int position) throws IndexOutOfBoundsException
position
- 位置IndexOutOfBoundsException
public int get(byte[] dst, int position, int length) throws IndexOutOfBoundsException
dst
- 目标数组position
- 位置length
- 长度IndexOutOfBoundsException
public int get(byte[] dst)
dst
- 目标数组public int get(ByteBuffer srcByteBuffer)
srcByteBuffer
- 接收数据的 ByteBuffer 对象public int write(int writePosition, byte[] srcBytes, int offset, int length)
writePosition
- 缓冲区中的位置srcBytes
- 源字节数组offset
- 字节数组便宜length
- 写入数据长度public int writeEnd(byte[] srcBytes, int offset, int length)
srcBytes
- 源字节数组offset
- 字节数组便宜length
- 写入数据长度public int writeHead(byte[] srcBytes, int offset, int length)
srcBytes
- 源字节数组offset
- 字节数组便宜length
- 写入数据长度public int write(int writePosition, ByteBuffer src)
writePosition
- 缓冲区中的位置src
- 需要写入的缓冲区 ByteBuffer 对象public int writeEnd(ByteBuffer src)
src
- 需要写入的缓冲区 ByteBuffer 对象public int writeHead(ByteBuffer src)
src
- 需要写入的缓冲区 ByteBuffer 对象public int read(int readPosition, ByteBuffer dst)
readPosition
- 缓冲区中的位置dst
- 需要读入数据的缓冲区ByteBuffer 对象public int readHead(ByteBuffer dst)
dst
- 需要读入数据的缓冲区ByteBuffer 对象public int readEnd(ByteBuffer dst)
dst
- 需要读入数据的缓冲区ByteBuffer 对象public boolean waitData(int length, int timeout, Runnable supplier)
length
- 期望的数据长度timeout
- 超时时间,单位: 毫秒supplier
- 每次等待数据所做的操作public boolean waitData(byte[] mark, int timeout, Runnable supplier)
mark
- 期望出现的数据timeout
- 超时时间,单位: 毫秒supplier
- 每次等待数据所做的操作public boolean reallocate(int newSize) throws LargerThanMaxSizeException
newSize
- 重新分配的空间大小LargerThanMaxSizeException
- 通道容量不足的一场public int indexOf(byte[] mark)
mark
- byte 标识数组public boolean startWith(byte[] mark)
public String readLine()
public ByteBuffer readWithSplit(byte[] splitByte)
splitByte
- 分割字节数组public void saveToFile(String filePath, long length) throws IOException
filePath
- 文件路径length
- 需要保存的长度IOException
- Io 异常public String content()
Copyright © 2020 Voovan. All rights reserved.