编程杂谈

IO&NIO的区别NIOJavaNIO(NewIONonBlockingIO)是从Java1.4版本引入的一个新的IOAPI,可以替代标准的JavaIOAPI。NIO与原来的IO有着同样的作用和目的,但是使用的方式不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将更加高效的方式进行文件读写操作。区别IONIO面向流(Stream)面向缓冲区(Buffer)阻塞IO(BlockingIO)非阻塞IO(NonBlockingIO)无选择器(Selecors)缓冲区(Buffer)创建缓冲区(allocate)缓冲区本质就是数组,用于存储不同的数据缓冲区类型:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer//分配一个指定大小的Byte缓冲区(大小必须指定)ByteBufferbbuffer=ByteBuffer.allocate(1024);读&取缓冲区的两大核心方法缓冲区放入数据(put)放入方法put()有很多重载这里说明一下第一种:put(byte[]src,intoffset,intlength)byte[]src:放入缓冲区的数组intoffset:放入缓冲区数组的偏移量intlength:偏移量向后放入length位数据到缓冲区后两个参数为可选,不设置,表示把整个数组放入缓冲区。//Strings="abcde";byte[]bytes=newbyte[]{'a','b','c','e','f'};//数据放入缓冲区//bbuffer.put(s.getBytes());bbuffer.put(str.getBytes());读取缓冲区数据(get)在读取缓冲区数据之前,需要转换缓冲区模式为读取模式。bbuffer.flip();//读取缓冲区数据首先需要切换缓冲区模式System.out.println(bbuffer.get(0));//97打印出来的是字节码清空缓冲区但是'清空'后,缓冲区的数据依然存在,处于被遗忘状态bbuffer.clear();缓冲区的四大核心属性大小关系:mark<=position<=limit<=capacitycapacity:容量,代表缓冲区存储数据的大小,一旦声明不能改变limit:界限,表示缓冲区可以操作数据的大小(limit后的数据不能进行读写)position:位置,表示缓冲区正在操作数据的位置。mark:标记,表示记录当前position的位置,可以通过reset()恢复到mark位置。创建缓冲区时写入数据时读取数据时mark记录position的位置@Testpublicvoidtest(){byte[]bytes=newbyte[]{'a','b','c','e','f'};//创建放入数据切换模式ByteBufferbuf=ByteBuffer.allocate(10);buf.put(bytes);buf.flip();//记录position的位置buf.mark();//创建新的数组取出缓冲区的数据,添加到des字节数组byte[]des=newbyte[buf.limit()];buf.get(des,0,2);//输出数组的值System.out.println(newString(des,0,2));System.out.println(buf.position());buf.reset();//恢复position到mark位置System.out.println(buf.position());}