码迷,mamicode.com
首页 > 其他好文 > 详细

NIO

时间:2017-06-23 18:19:19      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:inpu   文件中   select   缓冲区   rand   lin   一个   写入   读取   

NIO主要有三大核心部分:
通道:Channel
缓冲区:Buffer
选择器:Selector
通道负责传输,缓冲区负责存储,选择器用于监听多个通道的事件。比如:连接打开,数据到达

传统IO基于字节流和字符流进行操作,而NIO基于管道和缓冲区进行操作。数据总是从通道读取到缓冲区,或者从缓冲区写入到通道中。

IO和NIO的区别:
1.IO是面向流(单向的)的,NIO是面向缓冲区(可读可写)的。
2.IO是阻塞的,NIO是非阻塞的
通道可以异步的读写。


Channel
最重要的实现类:
FileChannel:从文件中读写数据
DatagramChannel:通过UDP读写网络中的数据
SocketChannel:通过TCP读写网络中的数据
ServerSocketChannel:可以web服务器一样监听新进来的TCP连接,每个连接都会创建一个SocketChannel

Channel与Stream的区别在于:
Channel是双向的,而Stream只能是单向的(Stream必须是InputStream或者OutputStream的一个子类,即要么是输入流,要么是输出流,不能即输入又输出)。Channel在被打开之后,即可以读,也可以写,或者同时进行读写操作。 因为Channel是双向的,因此它比Stream更好的反应了底层操作系统IO的实质。特别是在Linux系统中,底层操作系统都是双向的。

=======================================================
任何发送到Channel的数据都必须先放进Buffer

Channel
获取通道的方式:
1.通过流来获取

  • FileInputStream
  • FileOutputStream
  • RandomAccessFile
  • DatagramSocket
  • Socket
  • ServerSocket

例如:
FileInputStream fis = new FileInputStream("D:\\1.txt");
FileChannel channel = fis.getChannel();
2.通过Files类的静态方法newByteChannel()获取字节通道。
或者通过通道的静态方法open()打开并返回指定通道。

 

步骤
读取文件:
1.创建输入流,并从输入流中获取通道(Channel)
2.创建缓冲区
3.将数据读入缓冲区
写入数据到文件:
1.

FileInputStream fis = new FileInputStream("D:\\1.txt");

 

NIO

标签:inpu   文件中   select   缓冲区   rand   lin   一个   写入   读取   

原文地址:http://www.cnblogs.com/rouqinglangzi/p/7070962.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!