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)); } } } }