public class LinkedByteBuffer extends Object
这个类设计给有一小块缓冲数据,可能需要同时读写的场景。
!!! 注意,本类非线程安全,如果多线程共享实例,请自行加锁保护。
实际上的存储 ... |<---- unit --->| | | ----- [0d 0a 18 23 ...] ^ [35 f2 25 0e ...] nb [12 ae 11 01 ...] V ... <- 如果满了,再写会自动延申 逻辑上可以看作一个数组 rIndex(读) capacity 已分配容量 V V [0d 0a 18 23 35 f2 25 0e . . . ] ^ ^ wIndex limit 有效区的位置 只写下标 如果指向 capacity则无空间
Constructor and Description |
---|
LinkedByteBuffer()
创建一个 10M上限实例,8K增量单位,默认分配 80K的实例
|
LinkedByteBuffer(int nb)
创建一个 10M上限实例,8K增量单位的实例
|
LinkedByteBuffer(int unit,
int nb)
创建一个 10M上限实例
|
LinkedByteBuffer(int unit,
int nb,
int maxLimit) |
Modifier and Type | Method and Description |
---|---|
String |
digest(String algorithm)
计算内容有效区的 的数字签名
|
byte |
get(int index)
从指定位置读取一个字节
|
int |
getCapacity() |
int |
getLimit() |
int |
getMaxCapacity() |
int |
getReadIndex() |
int |
getUnit() |
int |
getWriteIndex() |
boolean |
isEmpty() |
String |
md5sum() |
int |
read(byte[] buf)
将自身的内容,从当前位置(内部游标)copy 到目标数组,并会将游标指向下一个未读取的位置
|
int |
read(byte[] buf,
int off,
int len)
将自身的内容,从当前位置(内部只读游标)copy 到目标数组,并会将只读游标指向下一个未读取的位置
|
String |
readAll()
读取剩下的全部字符串(UTF-8编码)
|
String |
readLine()
读取一行的字符串(UTF-8编码)
|
void |
reset()
将只读和只写游标同时归0; 并清空有效区
|
int |
seekRead(int pos)
移动只写游标。你给入的新位置不能小于0,也不能大过有效区上限。
|
int |
seekWrite(int pos)
移动只写游标。你给入的新位置不能小于0,也不能大过【有效区】上限。
|
void |
set(int index,
int b)
向指定从指定位置写入一个字节
|
String |
sha1sum() |
int |
skipRead(int off)
从当前位置偏移只读游标。但是它也遵循
seekRead(int) 函数的限定。 |
int |
skipWrite(int off)
从当前位置偏移只写游标。但是它也遵循
seekWrite(int) 函数的限定。 |
byte[] |
toArray() |
String |
toString() |
int |
truncate(int limit)
截取内容。给定长度必须要在有效区长度范围以内
|
void |
write(byte[] buf)
将自身的内容,从当前位置(内部只写游标)写入输入数组的内容
|
void |
write(byte[] buf,
int off,
int len)
将自身的内容,从当前位置(内部只写游标)写入输入数组的内容
|
void |
write(String str)
写入字符串
|
void |
writeLine(String str)
写入一行字符串,会自动再后面添加换行符.
|
public LinkedByteBuffer()
public LinkedByteBuffer(int nb)
nb
- 初始分配多少单位的字节public LinkedByteBuffer(int unit, int nb)
unit
- 动态分配字节的最小单位,譬如 8192(8K)nb
- 初始分配多少单位的字节public LinkedByteBuffer(int unit, int nb, int maxLimit)
unit
- 动态分配字节的最小单位,譬如 8192(8K)nb
- 初始分配多少单位的字节maxLimit
- 最大可分配的字节数,譬如 1024*10240(10M)public void reset()
public int skipRead(int off)
seekRead(int)
函数的限定。off
- 偏移量public int seekRead(int pos)
否则,会自动对齐到两端边界。即,小于0会当作0,大于有效区上限则等于上限。
pos
- 新的只读游标位置public int skipWrite(int off)
seekWrite(int)
函数的限定。off
- 偏移量public int seekWrite(int pos)
否则,会自动对齐到两端边界。即,小于0会当作0,大于上限则等于上限。
pos
- 新的只写游标位置public void write(byte[] buf) throws IOException
buf
- 输入数组IOException
- 当写入的字节超过自己的指定最大限度public void write(byte[] buf, int off, int len) throws IOException
buf
- 输入数组off
- 要写入字节的起始位置len
- 要写入多少字节IOException
- 当写入的字节超过自己的指定最大限度public void write(String str) throws IOException
str
- 字符串IOException
- 当写入的字节超过自己的指定最大限度public void writeLine(String str) throws IOException
str
- 字符串(UTF-8编码)IOException
- 当写入的字节超过自己的指定最大限度public int read(byte[] buf)
buf
- 目标数组read(byte[], int, int)
public int read(byte[] buf, int off, int len)
buf
- 目标数组off
- 起始位置下标len
- 最多 copy 多少字节public String readLine()
public String readAll()
public byte get(int index)
index
- 下标。如果为负数,则表示从后面读取public void set(int index, int b)
index
- 下标。如果为负数,则表示从后面读取public boolean isEmpty()
public int getMaxCapacity()
public int getCapacity()
public int getLimit()
public int truncate(int limit)
limit
- 长度public int getWriteIndex()
public int getReadIndex()
public int getUnit()
public String sha1sum()
public String md5sum()
public String digest(String algorithm) throws NoSuchAlgorithmException
algorithm
- 算法,比如 "SHA1" 或者 "MD5" 等NoSuchAlgorithmException
- 数据签名方法不支持public byte[] toArray()
Copyright © 2020. All rights reserved.