NIO的基本概念和缓冲区
NIO:
缓冲区:
在NIO库中,所有的数据都是用缓冲区处理的,在读取数据时,它是直接读到缓冲区的,在写入数据时,它是写入到缓冲区的,任何时候访问NIO中的数据,你都是将它放到缓冲区中。
缓冲区实质上是一个数组,通常它是一个字节数组,但是也可以使用其他种类的数组,但是一个缓冲区不仅仅是一个数组,缓冲区提供了对数据的结构化访问,而且还可以跟踪系统的读写进程
缓冲区类型:
最常用的缓冲区类型是ByteBuffer
。一个ByteBuffer可以在其底层字节数组上进行get/set操作(即字节的获取和设置)。ByteBuffer不是NIO中唯一的缓冲区类型,事实上,对于每一种基本java类型都有一种缓冲区类型
相关代码
public class Test14 {
public static void main(String[] args) {
//创建一个字节缓冲区,申请内存空间为8个字节
ByteBuffer buf = ByteBuffer.allocate(10);
System.out.println("position=" + buf.position());//0
System.out.println("limit=" + buf.limit());//10
System.out.println("capacity=" + buf.capacity());//10
System.out.println("-------------------");
// 向缓冲区中写入数据
buf.put((byte) 12);
buf.put((byte) 13);
buf.put("lalla".getBytes());
System.out.println("position=" + buf.position());//7
System.out.println("limit=" + buf.limit());//10
System.out.println("capacity=" + buf.capacity());//10
System.out.println("-------------------");
//缓冲区反转
buf.flip();
System.out.println("position=" + buf.position());//0
System.out.println("limit=" + buf.limit());//7
System.out.println("capacity=" + buf.capacity());//10
// 告知当前位置和标记位置是否有元素
if (buf.hasRemaining()) {
for (int i = 0; i < buf.remaining(); i++) {
System.out.println(buf.get(i));
}
}
}
}