前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java NIO-1.概述

Java NIO-1.概述

作者头像
悠扬前奏
发布2019-05-30 20:20:06
3470
发布2019-05-30 20:20:06
举报
文章被收录于专栏:悠扬前奏的博客

Java NIO由以下几个核心组件组成:

  • Channels
  • Buffers
  • Selectors Java NIO拥有的类和组件比这些要多,但是channel,BufferSelector组成了这个API的核心。在我(原作者)看来,像Pipe和`FileLock这些类仅仅只是用于将这三个核心组件结合在一起用的。所以,概述这一节仅关注这三个组件,其他组件在其他单独的章节中介绍。

Channels和Buffers

一个典型的NIO从Channels开始。Channel有点像流,数据能从Channel读到Buffer中,也能从Buffer写到Channels中。如下图所示:

Channels read data into Buffers, and Buffers write data into Channels

Channel和Buffer有好几种类型,下面是Java NIO的几种实现:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

可以看到,这些通路涵盖了UDP和TCP网络IO以及文件IO。 和这些类一起也有一些有趣的接口,简洁起见,概述一节不做介绍,在本教程其他涉及到他们的地方再做解释。

下面是Java NIO中Buffer的一些核心的实现:

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

这些Buffer涵盖了你能通过IO传输的基础数据类型:字节,短整型,整型,长整型,浮点数,双精度浮点数和字符。 Java NIO还有一个MappedByteBuffer,用于将内存映射文件关联起来。这里也省略不做介绍。

Selector

Selector允许单个线程处理多个Channel。如果应用打开了很多连接(Channels),但是每个连接的流量又很少,它就非常好用了。例如聊天室服务器。 以下是一个例子,单线程使用一个Selector处理三个Channel

A Thread uses a Selector to handle 3 Channel's

要使用Selector,需要用它注册Channel,然后调用它的select()方法。这个方法将会阻塞直到某个注册的通路有事件就绪。一旦这个方法返回,线程将会处理这些事件。例如新入连接,数据就绪等。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.05.31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Channels和Buffers
  • Selector
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档