Java NIO开篇

论坛 期权论坛 脚本     
匿名技术用户   2021-1-4 13:13   707   0

最近开始接触NIO,所以以系列的博客来记录自己的学习过程。

Java NIO(New IO):

它是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。

它有下面这几个主要的模块组成:

  • 通道(Channels)
  • 缓冲(Buffers)
  • 选择器(Selectors)


①Java NIO:Channels and Buffers(通道和缓冲区)

标准的IO基于字节流和字符流进行操作,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。

基本上,所有的IO在NIO中都从一个Channel开始.Channel有点像流。数据可以从Channel读到Buffer中,也可以从Buffer写到Channel中。

Java NIO中Channel的主要实现:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

上面的这些实现类涵盖了UDP和TCP的网络IO,以及文件IO


Java NIO中Buffer的主要实现:

  • ByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer

这些Buffer覆盖了你能通过IO发送的基本数据类型:byte, short, int, long, float, double 和 char。

②Java NIO:Non-Blocking IO (非阻塞IO)

Java NIO可以让你非阻塞地使用IO。例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情


③Java NIO:Selector(选择器)

Java NIO引入了选择器的概念,选择器用于监听多个通道的时间,(例如:连接打开,数据到达).因此,单个的线程可以监听多个数据通道。

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



要使用Selector,得向Selector注册Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等。





分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP