NIO入门-----01

package com.sico.pck01_nio;import java.nio.ByteBuffer;import org.junit.Test;/** * @author Sico * 1、NIO入门:三个核心概念如下: *   |--通道:连接作用,连接数据源和目标地 *   |--缓冲区:用于存取数据 *   |--选择器: *    * 2、NIO与IO的区别: *   |--IO面向流,NIO面向缓冲区 *   |--IO阻塞,NIO非阻塞 *   |-- * 3、(1)缓冲区:负责数据的存取,底层数组(用于存取不同类型的数据),根据类型的不同有相应类型的缓冲区(boolean除外):ByteBuffer,CharBuffer,LongBuffer,IntBuffer,FloatBuffer, *   DoubleBuffer,ShortBuffer===》》》以上缓冲区的管理方式类似,都是通过allocate换区缓冲区。最常用为ByteBuffer缓冲区 *   (2)缓冲区中存取数据的两个核心方法,put存,get取 *   (3)缓冲区中的核心属性 *    |--mark:记录当前position的位置,通过reset回复到mark记录的位置      |--position:缓冲区中正在数据的位置      |--limit:缓冲区中可以操作数据的大小,limit后面的数据无法操作      |--capacity:缓冲区的最大容量,一旦声明不允许改变,原因:底层是数组,数组大小声明后不允许更改                 规律:mark<=position<=limit<=capacity * */public class Nio01 { @Test public void fun02(){ ByteBuffer buf = ByteBuffer.allocate(1024); buf.put("abcde".getBytes()); printProperty(buf); print("******************************"); buf.flip(); byte[] dst=new byte[buf.limit()]; buf.get(dst, 0, 2); print("获取到的数据:"+new String(dst)); buf.mark(); printProperty(buf); print("******************************"); buf.get(dst, 2, 2); print("获取的数据:"+new String(dst)); printProperty(buf); print("******************************"); buf.reset(); printProperty(buf); //判断缓冲区中是否还有数据 if(buf.hasRemaining()){ print("缓冲区中还可以获取的字节数:"+buf.remaining()); } } @Test public void fun01(){ //1、获取指定大小的缓冲区 ByteBuffer buf = ByteBuffer.allocate(1024); printProperty(buf); print("******************************"); //2、put存取数据,写模式 buf.put("abcde".getBytes()); printProperty(buf); //3、切换模式 buf.flip(); print("******************************"); //4、读模式 printProperty(buf); byte[] dst=new byte[buf.limit()]; buf.get(dst); print("获取到的数据:"+new String(dst)); print("******************************"); printProperty(buf); //5、rewind();可重复读取数据 buf.rewind(); print("******************************"); printProperty(buf); //6、清空缓冲区clear,但是缓冲区中的数据依然存在,处于被遗忘的状态 buf.clear(); print("依然有数据:"+(char)buf.get()); print("******************************"); printProperty(buf); } public void  printProperty(ByteBuffer buf){ print("position:"+buf.position()); print("limit:"+buf.limit()); print("capacity:"+buf.capacity()); } public void print(Object o){ System.out.println(o); }}
上一篇:ByteUtil


下一篇:小容量的byteBuffer 读取大文本