关于NIO的使用问题

都说NIO是面向缓冲区的,BIO是面向流的,那么使用NIO的时候都是从缓冲区读取数据的吗?那么缓冲区中的数据又是何时存入的?20160205173141_646.jpg

这是网络上一个示意图,Buffer的大小是如何确定的?
NIO中还有一个比较重要的选择器,选择器的作用是选择发生事件的Channel,然后将Channel中的数据存放到Buffer中?
最后还有一个问题,就是有一个需求需要做一个NIO的服务器,通常最少需要创建多少个线程?
网上看了一些教程但还是不太明白,望高手解答

阅读 1.9k
1 个回答

BIO,NIO,最重要的区别是应该是阻塞IO与非阻塞IO,

第一步:获取通道

FileInputStream fin = new FileInputStream( "readandshow.txt" );
FileChannel fc = fin.getChannel();  

第二步:创建缓冲区

ByteBuffer buffer = ByteBuffer.allocate( 1024 );


第三步:将数据从通道读到缓冲区

fc.read( buffer );

上面代码基本上可以解释你前半部分的问题

Selector是一个对象,它可以注册到很多个Channel上,监听各个Channel上发生的事件,并且能够根据事件情况决定Channel读写。这样,通过一个线程管理多个Channel,就可以处理大量网络连接了
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题