java io nio pio_Java NIO系列教程(一) Java NIO 概述

Java NIO系列教程(一) Java NIO 概述

Java NIO系列教程(一) Java NIO 概述

为什么80%的码农都做不了架构师?>>>

8e08d821c7e8cb7ac0c8424ed1625e0b.png

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

Channels

Buffers

Selectors

虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。

Channel 和 Buffer

基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。 数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。这里有个图示:

9c629606808c28cb092689654892965e.png

Channel和Buffer有好几种类型。下面是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 还有个 Mappedyteuffer,用于表示内存映射文件, 我也不打算在概述中说明。

Selector

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

这是在一个单线程中使用一个Selector处理3个Channel的图示:

d4a39085d69d57a92478601a1e7a44fb.png

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

转载于:https://my.oschina.net/kepler/blog/202010

Java NIO系列教程(一) Java NIO 概述相关教程

java ProcessBuilder调用cmd命令

java ProcessBuilder调用cmd命令 String ffmpeg = D: cd D:\JavaOption\ffmpeg-4.3.1-full_build\bin ffmpeg -i d:\11.mkv -map 0:s:0 sub11.srt;ListString cmdList = new ArrayList();cmdList.add(cmd);cmdList.add(/c);cmdList.add(ffmpeg );ProcessBuilde

Java NIO系列教程(十二) Java NIO与IO

Java NIO系列教程(十二) Java NIO与IO 为什么80%的码农都做不了架构师? 当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的

编写Java程序,中国道教中掌管天宫的最高权力统治者是玉帝(Empe

编写Java程序,中国道教中掌管天宫的最高权力统治者是玉帝(Emperor),我们可以认为玉帝是一个单例模式,在这个场景中,有玉帝和天宫的大臣(Minister)们,大臣每天要上朝参见玉帝,而每一天参 中国道教中掌管天宫的最高权力统治者是玉帝(Emperor),我们

基于JavaWeb的旅游项目--搜索分页功能

基于JavaWeb的旅游项目--搜索分页功能 文章目录 1、搜索功能---界面展示 2、搜索与分页的后台代码 RouteServiceTest.java RouteService.java RouteDao.java RouteServlet.java MyBatis的多参数传递 3、搜索与分页的前台代码 header.jsp 编写搜索框架事件 sear

关于NIOS中断服务函数中的变量在main函数中没有变化的问题

关于NIOS中断服务函数中的变量在main函数中没有变化的问题 关于NIOS中断服务函数中的变量在main函数中没有变化的问题 关键词:SOPC NIOS 中断 ??前段时间做NIOS的PIO中断时遇到一个问题,在中断处理函数中对一个全局变量进行赋值,然后在main函数中的whlie(1

编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类

编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以“62”开头,如图所示。 使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以“62”开头,如图所示。 (1)创

计算机视觉基础系列(python与opencv的操作与运用/tensorflow的

计算机视觉基础系列(python与opencv的操作与运用/tensorflow的基础介绍)(十六)---图片的镜像 镜像操作,可以看作是图片的翻转操作,其原理是:实现的步骤是(1.创建一个足够大的“画板”,2将一副图像分别从前向后、从后向前绘制,3绘制中心分割线) 新建

java学习笔记day3【基础语法】

java学习笔记day3【基础语法】 变量的命名规范; 所有的变量、方法、类名,见名知意 局部变量、类成员变量、方法名:首字母小写和驼峰原则:monthSalary,除了第一个单词意外所有的首字母都大写 常量:大写字母和下划线:MAX_VALUE 类名:首字母大写和驼峰原则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值