一、Buffer基本使用
/*** buffer正确使用姿势* 1.向buffer写入数据,调用channel.read(buffer)* 2.调用flip方法切换到读模式* 3.从buffer读数据,通过get方法,每次读取一个字节或字符* 4.调用clear方法或者compact方法切换到写模式*/
@Slf4j
public class ByteBufferDemo {public static void main(String[] args) {//获取Channel有两种方法://1.通过输入输出流//2.通过RandomAccessFile//小技巧:.twr就可以快捷写出try(){}catch(Exception e){}的语句try (FileChannel fileChannel = new FileInputStream("text.txt").getChannel()) {//划分一块内存作为缓冲区,参数代表容量,表示10个字节ByteBuffer buffer = ByteBuffer.allocate(10);//从Channel读,写入缓冲区,返回-1表示读完了while(fileChannel.read(buffer) != -1) {//打印buffer的内容//切换到buffer读模式buffer.flip();//读取buffer中的数据,get方法表示一次读一个字节while(buffer.hasRemaining()) { //buffer检查是否还有剩余的数据byte b = buffer.get();log.info("从buffer中读取一个字符{}", (char)b);}buffer.clear();//切换到buffer写模式,或者调用compact方法}} catch (IOException e) {e.printStackTrace();}}
}
二、Buffer内部结构
重要属性:
1.capacity 容量
2.position 指针,读的位置,索引下标
3.limit 读写限制
flip方法从头开始,切换为读模式:
clear方式从头开始,切换为写模式:
compact方法是将没有读完的部分向前压缩然后切换为写模式: