您的位置:首页 > 编程语言 > Java开发

Java NIO 的简单读写 以及理解

2017-01-10 17:00 375 查看
   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<Integer> f=af.read(ByteBuffer.allocate(1024*1024),0);

四。回调式异步读取。

利用asychronousFileChannel 方法 对象 调用read ()在read里面的参数中进行匿名内部类CompletionHandler的实现  ,成功后走Completed方法,失败后走failed方法。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: