请参阅:Java NIO 系列教程

NIO初窥

Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API

核心组件:Channel、Buffers和Selector

NIO和IO主要区别

特征NIOIO
基于通道(Channel)和缓冲区基于字节流和字符流
阻塞非阻塞IO阻塞IO
选择器有选择器(监听多个通道的事件)无选择器
  • Channel与Buffer:基本上所有的IO在NIO都从一个Channel开始。Channel有点像流,数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。

  • JAVA NIO中,Channel的主要实现方法有:FileChannel、DatagramChannel、SocketChannel、ServerSocketChannel

  • JAVA NIO中,Buffer的主要实现方法有:ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer等

  • Selector :Selector允许单线程处理多个 Channel。例如在一个聊天服务器中,一个应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便。如图:
    这里写图片描述

面向流与面向缓冲

Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。

Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐