Java NIO系列1-概观
Java NIO系列1-概观
Java NIO。中间的N你既可以理解为(new),也就是新的IO,相对于java1.5之前的IO它确实是新的;也可以理解为(no-blocking),也就是非阻塞的IO。
Java NIO的包和类
从Java 文档中可以看到,Java NIO的主要有这些包:
- java.nio
- java.nio.channels
- java.nio.channels.spi
- java.nio.charset
- java.nio.charset.spi
- java.nio.file
- ...
Java NIO具有这么多的包,每个包下面有具有许多的类。java.nio包下定义了一些各种类型的缓冲区,java.nio.channels类里边定义了一些通道如ServerChannel,ServerSocketChannel。java.nio.file下定义写了一些新的文件操作api,诸如Paths,Files等。但是核心的主要是下面三个:
- Channel 通道
- Buffer 缓冲区
- Selector 选择器
通道和缓冲区
在JavaNIO中,通道和缓冲区是很重要的部分,因为数据是通过这两个组件来流转的。数据可以从一个通道流向缓冲区,也可以从缓冲区流向通道。
JavaNIO中主要有以下通道:
| 类名 | 用途 |
|---|---|
| FileChannel | 文件IO操作 |
| DatagramChannel | UDP网络IO |
| SocketChannel | |
| ServerSocketChannel | TCP网络IO |
这些类涵盖了,TCP,UDP网络IO.和文件IO.
Java NIO中的buffer,java中的众多buffer具有多种类型,使得我们可以通过IO来传递byte,short,int,double,float,long和字符串。ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer等。
选择器
前面我们提到,JavaNIO中重要的三个元素:通道,缓冲区,选择器。选择器是这样的一种东西:可以使单个线程处理多个通道。举个例子,假如我们有三个通道,我们将这三个通道注册在一个选择器上,然后线程让选择器来告诉他哪个线程准备就绪,可以“使用”了。
事实上,你可以不使用选择器,不使用这个“可以让单个线程操作多个通道”的玩意。你依然可以使用单个线程处理单个通道。但是仔细想想就会发现,选择器的好处还是很多的。
本篇,这里我们大概了解了一下JavaNIO是什么,主要包含什么东西,后续的文章再对每一个组件进行详细的介绍,并结合代码示例。
Java NIO系列1-概观的更多相关文章
- java nio系列文章
java nio系列教程 基于NIO的Client/Server程序实践 (推荐) java nio与并发编程相关电子书籍 (访问密码 48dd) 理解NIO nio学习记录 图解ByteBuff ...
- Java NIO系列教程(八)JDK AIO编程
目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...
- Java NIO系列教程(七) selector原理 Epoll版的Selector
目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...
- Java NIO系列教程(三) Channel之Socket通道
目录: <Java NIO系列教程(二) Channel> <Java NIO系列教程(三) Channel之Socket通道> 在<Java NIO系列教程(二) Ch ...
- Java NIO系列教程(二) Channel通道介绍及FileChannel详解
目录: <Java NIO系列教程(二) Channel> <Java NIO系列教程(三) Channel之Socket通道> Channel是一个通道,可以通过它读取和写入 ...
- Java NIO系列教程(十一) Java NIO 与 IO
Java NIO系列教程(十一) Java NIO与IO 当学习了 Java NIO 和 IO 的 API 后,一个问题马上涌入脑海: 我应该何时使用 IO,何时使用 NIO 呢?在本文中,我会尽量清 ...
- Java NIO系列教程(十)DatagramChannel
Java NIO系列教程(十)DatagramChannel 转载自并发编程网 – ifeve.com,本文链接地址: Java NIO系列教程(十) Java NIO DatagramChannel
- Java NIO系列教程(四) Scatter 和 Gather
Java NIO系列教程(四) Scatter 和 Gather Java NIO 开始支持 scatter/gather,scatter/gather 用于描述从 Channel(译者注:Chann ...
- Java NIO系列教程(三-十二) Buffer
原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...
随机推荐
- 如何在网中使用百度地图API自定义个性化地图
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 访问docker仓库
仓库(Repositiry)是集中存放镜像的地方,分为公共仓库和私有仓库.一个容易与之混淆的概念是注册服务器(Registry).实际上注册服务器是存放仓库的具体服务器,一个注册服务器上可以有多个仓库 ...
- Python future使用
Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动.有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了. 从Python 2.7到Pytho ...
- JS自定义表单提交处理方案
JS自定义数据提交处理方案 问题 在Ajax技术流行的今天,我遇到了一个很头疼的问题,我需要维护一个前人开发的问题单模块功能,并且不停的迭代开发,而这个问题就是问题单字段特别多,而且除了更新问题单外, ...
- python 10道面试陷阱题目
- ajax 跨域 springboot
CORS 定义 Cross-Origin Resource Sharing(CORS)跨来源资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,是 ...
- Unity 阴影的制作方式
Unity阴影制作的三种方式. 方式一:Light中Shadow Type的类型 包括Hard Shadows.Soft Shadows.No Shadows: Mesh Renderer中的属性 ...
- RocketMQ_问题_启动控制台console报错,connect to <null> failed
配置如图所示: 问题如图所示: 明明配置了nameserver参数为啥还是connect to null呢? 我的rocketmq部署在CentOS7虚拟机上,原来是没关闭防火墙,执行:systemc ...
- JENKINS针对不同项目组对用户进行权限分配
权限需求 因JENKINS上存有de(开发).te(测试).re(预发布)等三个不同环境的项目,同时因为项目需求,需要对不同的开发及测试人员配置不同的jenkins权限,即以项目为单位,对不同人员进行 ...
- Spring Cloud使用样例
Spring Cloud Demo 项目地址:https://github.com/hackyoMa/spring-cloud-demo 组件 基于Spring Boot 2.0.4.Spring C ...