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方法就是阻塞的,直到他所监听的事件中有事件被触发时才会解除阻塞。