java IO ——new I/O包

来源:互联网 发布:mysql查询面试题及答案 编辑:程序博客网 时间:2024/05/21 15:41

新IO系统基于两个最简单的项目:通道和缓存区。通道代表对一个IO源或目标的开放式连接,缓存区存放可操作的数据,NIO是异步非阻塞式调用io系统


同步、异步、阻塞、非阻塞

同步是一个连接一个线程,而异步是一个请求一个线程,阻塞是当读取不到数据时线程会等待,非阻塞是线程发出数据请求后转而向下执行,当数据加载好时通知线程


NIO基础

fileinputstream f = new FileInputStream(".txt")//FileChannel fchan = f.getchannel();//建立通道int fsize = fchan.size();bytebuffer fb = bytebuffer.allocate(fsize);//建立缓存区fchan.read(fb);//将数据读取到缓存区

NIO和IO的区别

1、IO是面向流的,从流中读取,没有缓存区不能操作;NIO是面向缓存的,在缓存中可以进行数据处理

2、IO中的流是阻塞的,当进行read或write时,线程将不能执行直到读取全部数据, NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。 线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)

3、通道类似于流,但可以双向操作

4、选择器(Selectors)Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。

5、当连接多而带宽小时用NIO,当连接少但带宽大时用IO

0 0
原创粉丝点击