关于nio,其实就是单线程的阻塞式io流,但是传统的io流都是单向,out或者in,在netty中有了一个全新的类就是buffer, buffer有六种,对应java的除了bool的其他类型,而且是双向的,既可以是写入也可以是写出,在buffer接口中有三个重要的元素,capacity,limit和position,position相当于左边,index, capacity是整个容器的容量,limit是可使用的容量,有flip方法可以控制反转,还有clear和rewind方法。
bytebuffer创建方法两种
ByteBuffer.allocate(1024);
byte[] b1=new byte[] {1};
ByteBuffer.wrap(b1);
DirectByteBuffer和keepbytebuffer的区别,是DirectByteBuffer会调用系统本身内存,不需要copy到虚拟机上,实现零拷贝,所以效率比较高,keepbytebuffer是jvm里先生成一份,再把数据拷贝到java模型之外的操作系统当中,然后直接和io设备交互,除此之外还有只读Buffer,就是直接把write重新了,只要调用就报错
ByteBuffer b = ByteBuffer.allocate(1024);
ByteBuffer asReadOnlyBuffer = b.asReadOnlyBuffer();