Java NIO 引入的新概念
1.缓冲区:
2.通道:
3.选择器:
"nio放在jvm的直接内存中"
java 的io 与 nio的区别主要是 “阻塞和非阻塞的区别”。
java io:主要是通过 ”连接————线程“实现的。一个链接对应一个线程。
java nio:主要是通过 ”请求————线程“实现的。利用了选择器的优势。通过选择器进行注册在管道里线程的选择
简单的例子 : 客车停车请求。{售货员,司机,客户}。
一。利用nio进行 文件的读写。
利用 Paths.get("c:a.txt"); 来获取文件路径。 Paths
利用 br=Files.newBufferedReader(p, StandardCharsets.UTF_8); 来获取对应的文件读取缓冲流。 Files
还有 Files.readAllLiens(); 和 Files.readAllBytes();
二。利用NIO{FileChannel}进行文件的读写。
利用 Paths.get("");来获取对应文件。
利用 FileChannel.open(p,StandardOpenOption.READ);来进行返回读写操作。
利用 返回的FileChannel对象调用read()操作。 //这里的read读的是byte类型。ByteBuffer.allocate(1024);开buffer空间
利用 buffer.flip();来进行复位。
Charset c=Charset.forName("GBK"); //都是nio的新方法,用来进行字节码的转换
System.out.println(c.decode(bb)); //用来进行buffer的输出
FileChannel 对象里面的position用来定位到固定位置 ,完后可进行对应的read 或者writer操作。
fc.write(ByteBuffer.wrap("你好".getBytes()));//来进行buffer的写操作。
三。Java7中新增的异步NIO。
AsynchronousFileChannel-------用于文件的io
AsynchronousSocketChannel-------用于套接字io,支持超时。
AsynchronousServerSocketChannel-------用于套接字接受异步连接。
注意:异步NIO于同步NIO的区别除了关键字不一样之外 ,还多了个 Future 关键字 ,是上边关键字的返回类型。
应为是异步的在线程执行期间{可以通过返回类型Future来判断是否执行完成}可以做其他的事情。
Future
四。回调式异步读取。
利用asychronousFileChannel 方法 对象 调用read ()在read里面的参数中进行匿名内部类CompletionHandler的实现 ,成功后走Completed方法,失败后走failed方法。