什么是NIO
new IO 或者none block IO
什么是通道(Channel)
一个对可以实现IO操作的抽象,任何类实现了channel,则表明可以往通道存放一些byte,然后不需要再去操心如何去实现。
几种通道的介绍
- ByteChannel(声明了这个Channel可以处理的是byte)
- ReadableByteChannel(声明了这是个只读的Channel)
- WriteableByteChannel(名字如其意义)
- SeekableByteChannel
- etc
视图
事实上channel也不是直接操作byte[],而是操作其中的包装对象xxxBuffer。当然多数情况下我们连byteBuffer都懒得操纵,我们对ByteBuffer也做了装扮(decorate),使之变成了ByteBuffer的一个View,我们称xxxx是xxx的视图(view),实质上是表明,底层一样,但是对外的语义变换了。
视图带来了好处就是能够以我们熟悉的语义来操纵对象,而避免脑中还要顺便转换成相应的byte[]结构。
结论
NIO带来了新的对IO操作的抽象,但是也仅仅是模型变换,除此之外,更多的非模型上而是工程上实际问题带来了改进,比如非阻塞式的访问(其实Stream模型也可以做到非阻塞式访问,只不过要根据这个模型来重新实现),还有Network到Network的转发可以不经过用户态而直接在内核态的进行转发避免上下文切换带来的CPU和内存带宽的消耗,等其他可能我还没了解到的特性