nio实例:
NIO数据传输流程图
IO与NIO的区别:
编写第二个实例:
编写第三个实例:
源码中提到,对于buffer来说最重要的是三个属性:capacity、limit、position
capacity:简单来说就是表示存储元素的容量,一定确定不能更改
调用了.allocate(10),也就是说该buffer中只能存放10个元素
limit:指向索引的第一个元素,而且不能被读和写
position:指向于下一个元素,能够读和写
读操作的时候:
写操作:
这句话说明了,没有Boolean类型的buffer
对于buffer的操作我们有两种:
第一种:相对操作,就是我们之前使用没有指定读写索引的那种;
第二种:绝对操作,指定读写索引的那种。
标记mark,也就是当position读取到某个位置的时候,进行mark标记,这样的话,如果position读到后面又想回来的时候reset重置就可以回到mark的位置
4个属性之间的关系:0<=mark<=position<=limit<=capacity
对于buffer的三个操作:
clear:将limit设置为capacity,将position设置为0,相当于clear操作就是将buffer恢复成初始化状态
flip:将limit设置为当前postion位置,将position设置为0,然后重头开始读和写
rewind:limit不变,position设置为0.相当于在已读的基础上重头开始读。
buffer并不是一个线程安全的,如果需要线程安全需要自己设置
buffer的链式调用:
检验一下之前的结论是否正确:
这里说明一下clear,该方法本身不会清除数据,只是重置了两个属性的位置,回到初始化设置,所以基本上要和read()方法配合使用