博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java NIO Overview(2)
阅读量:3751 次
发布时间:2019-05-22

本文共 1128 字,大约阅读时间需要 3 分钟。

Java NIO consist of the following core components:

Java NIO由下面三个核心部分组成:
通道 Channels
缓冲 Buffers
多路复用器 Selectors

NIO当然还有更多的类和组件,但在我看来上面三个概念是NIO API的核心了,其余的,比如Pipe、FileLock只是用这三个核心组件联用的工具类而已。因此,在本篇概览中,我主要还是聚在这三个组件上。其余的会在教程中别的地方介绍到。

Channels and Buffers

总体上,NIO中所有IO都是从channel开始的。channel有点像Stream(流)。程序可将数据从channel读进buffer;同样,程序也能将数据从buffer读进channel。这里有个说明的插图:

这里写图片描述

Java NIO: Channels and Buffers

JavaNIO:Channels读数据到Buffers,Buffers读数据到Channels。Channels、Buffers有好几种类型。下面是主要的实现:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

As you can see, these channels cover UDP + TCP network IO, and file IO.

可见:Channels包括了UDP+TCP网络NIO,以及FileIO(文件IO)
除了这些类,还有一些有意思的接口,容后再说。
下面是NIO中实现Buffer接口的一些类:

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

这些Buffers 涵盖了你可以通过IO发送的基本的数据类型:byte, short, int, long, float, double and characters.(除了布尔)。

NIO还有能够映射到内存中文件的了MappedByteBuffer ,以后也会介绍。

Selectors

一个selector能单线程处理多Channel。如果你的应用保持了很多连接,但每个连接吞吐低,Selector这个特性倒是挺有用的,这里有插图解释了一个Selector处理3个Channel:

一个Selector处理3个Channel
要使用一个selector,首先要在Channel上注册它,然后调用Select()方法。Select()会一直阻塞到注册的Channel当中至少一个有事件通知。一旦方法返回,线程就可以处理剩下的“事件”了。典型场景如读数据等。

你可能感兴趣的文章
RISC-V生态架构浅析(认识RISC-V)
查看>>
? 精美图文带你掌握 JVM 内存布局
查看>>
谈谈go.sum
查看>>
tls 1.2 example
查看>>
GitHub 计划登陆中国,将产生哪些影响与意义?
查看>>
2019 我是怎样熬过来的?
查看>>
【C++学习计划】深入浅出——变量作用域(Day3)
查看>>
策略模式
查看>>
Spring Boot 实战 入门
查看>>
关于web系统整体优化提速总结
查看>>
分布式文件系统 - fastDFS
查看>>
BUAA OO 2019 第一单元作业总结
查看>>
格网编码查询方案在项目运用上的进一步探索
查看>>
BUAA-OO-2019 第三单元总结
查看>>
Matlab策略模式
查看>>
架构整洁之道
查看>>
支付渠道路由系统进化史
查看>>
行为型模式:解释器模式
查看>>
深入理解设计模式(22):享元模式
查看>>
spring boot
查看>>