java的IO与NIO

IO与NIO
	IO与NIO最重要的区别是数据打包和传输的方式不同,IO以流的方式处理数据,而NIO以块的方式处理数据。
	面向流的IO一次写入或读取一个字节的数据,可以链接多个过滤器来对字节流进行处理,操作和应用都比较简单,但是效率较低。
	面向块的NIO一次写入或读取一个数据块,处理数据要快得多,但是没有IO简节,容易理解。
NIO的BUFFERd
	Buffer有3个私有属性分别是:
		a)	postion,跟踪向缓冲区写了多少数据或者从缓冲区读了多少数据。
		b)	limit,表示有多少数据需要取走,或者有多少数据需要写入。
		c)	capacity,表示缓冲区的最大容量。
NIO的CHANNEL
	Channel是对IO流的封装,Channel是双向的,可以ByteBuffer的方式读或者写。
NIO的异步通信
	NIO的异步IO是一种非阻塞式的IO实现,IO通信在read时会阻塞着,直到有数据可读。但NIO不会阻塞,他通过事件的机制,当某个通道有数据可读时,会触发相应的事件来处理,不用启大量的线程来轮询读取数据。
	其实NIO也并非完全不阻塞,Selector的select方法就是阻塞的,直到他所监听的事件中有事件被触发时才会解除阻塞。

原文地址:https://www.cnblogs.com/zengxianxi/p/3618977.html