Java.nio使用总结(三)——Buffer
目录
ByteBuffer
基本概念
在使用ByteBuffer类时应当明确三个概念【记住这三个东西】
- position(标记所处的位置,文件读取到的位置)
- limit(文件的读取限制)
- capacity(空间大小)
方法使用
创建
/**
num输入大小
*/
ByteBuffer byteBuffer = ByteBuffer.allocate(int num);
【创建后的结果类似于这个图像】
public ByteBuffer put(ByteBuffer src)
用来向内部输入数据
public abstract byte get()
获取数据
ByteBuffer flip()
// 这个来看他父类的方法是怎么写的
public Buffer flip() {
limit = position;
position = 0;
mark = -1;
return this;
}
不难看出,这里是将limit放置到原position的位置,将position位置归零 (一般用于即将要进行read之前)
之前数据
之后数据
ByteBuffer rewind()
// 这个来看他父类的方法是怎么写的
public Buffer rewind() {
position = 0;
mark = -1;
return this;
}
这个是将position归零 (一般用于希望重新读取一遍文件)
之前状态
之后状态
public abstract ByteBuffer compact()
这个不是很好懂
(一般用来配合写入操作时;将position与limit之间的内容移到0与(limit - position)之间的区域,position的值变为limit - position,limit的值变为capacity;)
注意看数字的变化 、箭头的变化
之前
之后
ByteBuffer clear()
// 看源码
public Buffer clear() {
position = 0;
limit = capacity;
mark = -1;
return this;
}
将三个属性回复到刚开时的时候(并没有删除数据)
之前
之后
public final int remaining()
public final int remaining() {
return limit - position;
}
剩余空间
public final boolean hasRemaining()
public final boolean hasRemaining() {
return position < limit;
}
这是一个他父类的方法,用于是否还有空置
获取基本信息
byteBuffer.capacity();
byteBuffer.position();
byteBuffer.limit();