Java NIO系列教程(一) Java NIO 概述
Java NIO系列教程(一) Java NIO 概述
为什么80%的码农都做不了架构师?>>>
Java NIO 由以下几个核心部分组成:
Channels
Buffers
Selectors
虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。
Channel 和 Buffer
基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。 数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。这里有个图示:
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的图示:
要使用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 类名:首字母大写和驼峰原则