1、为什么要用NIO?:
NIO是JDK1.4加入的新包,NIO的创建目的是为了让JAVA程序员可以实现高速I/O而无需编写自定义的本机代码。
NIO将最耗时的I/O操作(既填充和提取缓冲区)转移回操作系统。因而可以极大的提高速度
缓冲区:
缓冲区的类型:
缓冲区的内部细节:
代码示例:
package com.lemon;
import java.nio.ByteBuffer;
public class NIODemo {
public static void main(String[] args) {
//创建一个字节缓冲区 申请内存空间为8字节
ByteBuffer buf = ByteBuffer.allocate(8);
System.out.println("position:" + buf.position()); //标记 记录数据存到哪了
System.out.println("limit:" + buf.limit()); //界限 最后位置的下标
System.out.println("capacity:" + buf.capacity()); //容量
System.out.println("----------------");
//向缓冲区写入数据
buf.put((byte)8);
buf.put((byte)9);
buf.put((byte)10);
buf.put((byte)11);
System.out.println("position:" + buf.position()); //标记
System.out.println("limit:" + buf.limit()); //界限 最后位置的下标
System.out.println("capacity:" + buf.capacity()); //容量
System.out.println("----------------");
//反转 将多余的缓冲区空间排除
buf.flip();
System.out.println("position:" + buf.position()); //标记
System.out.println("limit:" + buf.limit()); //界限 最后位置的下标
System.out.println("capacity:" + buf.capacity()); //容量
System.out.println("----------------");
//判断当前位置position和限制位置limit之间是否有值
if(buf.hasRemaining()) {
//remaining()返回当前位置与限制位置之间的元素个数
for(int i = 0; i < buf.remaining(); i++) {
byte b = buf.get(i);
System.out.println(b);
}
}
System.out.println("position:" + buf.position()); //标记
System.out.println("limit:" + buf.limit()); //界限 最后位置的下标
System.out.println("capacity:" + buf.capacity()); //容量
System.out.println("----------------");
}
}