【JAVA】【NIO】2、Java NIO Overview

Java NIO主要有以下核心组件构成:

  1. 通道
  2. 缓存
  3. 选择器

    Java NIO其实有比上面更多的类和组件,但是在我看来,Channel,Buffer,Selector是核心的API。其它组件,像管道和文件锁,仅仅只是在与三大核心组件结合使用时的通用工具类。

通道和缓存

一般来说,NIO中的所有IO都是从通道开始的。通道就像一个流,数据可以从通道中读到一个缓存里去,同样,数据可以从缓存写进通道里

上面代表读操作,下面代表写操作

在Java NIO中,主要有如下几种通道:

·FileChannel

·DatagramChannel

·SocketChannel

·ServerSocketChannel

这些通道覆盖了网络中的TCP,UDP的IO和文件IO。

在Java NIO中,核心的缓存如下:

·ByteBuffer

·CharBuffer

·DoubleBuffer

·FloatBuffer

·IntBuffer

·LongBuffer

·ShortBuffer

这些缓存包括了通过IO发送数据的基本数据类型。

Java NIO还有一个MappedByteBuffer是用于内存文件映射的。

选择器

一个选择器允许单个线程处理多个通道的数据。如果你的应用打开了很多连接(channel),这就非常方便了,但是每个连接(channel)的流量会小一点。比如聊天服务器。

单个线程通过选择器处理三个通道

首先把通道注册到选择器上,然后你调用select()方法,这个方法会阻塞,直到有一个通道在你注册的事件上就绪了。一旦方法返回了,线程就可以处理事件了。事件可以是建立连接,接受数据等等。

这里提前附上一段代码,各位读者,先看下,后面会慢慢讲解,代码中也会有详细的注释

这段代码就描述了选择器,注册等相关机制。

时间: 2024-08-10 13:49:55

【JAVA】【NIO】2、Java NIO Overview的相关文章

Java Nio 十六、Java NIO Files

最后更新:2015-04-15 这个Java NIO的Files类(java.nio.file.Files)提供了数个方法中文件系统中操作文件.这个Java NIO的Files类教程将会覆盖这些方法的大部分通用方法的使用.这个类包含了许多的方法,所以也可以核对这个JavaDoc,如果你需要一个没有在这里描述的方法.这个Files类只是可能为了它仍然有一个方法. 这个java.nio.file.Files类同java.nio.file.Path实例一起工作,以至于你在同Files类工作之前需要理解

Java第二天——标识符命名规则、Java的知识、快捷键的使用、Scanner获取值的常用方法

1.标识符命名规则 字母.下划线.数字.美元符号($)由这四个部分组成. 标识符=首字母+其他 首字母:字母.下划线.美元符号($) 其他:字母.下划线.数字.美元符号($) 注意: 1.首字母不能为数字 2.标识符不能是关键字 3.java语言严格区分大小写,比如:$name $Name表示两个不同的标识符 2.java程序的注释: 单行注释(//).多行注释(/**/).文档(doc)注释 单行注释:一般用于对每一行代码进行说明 多行注释:一般用于对每一段代码.某个方法.某个源文件进行解释说

elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RESTful style API这一层,这种客户端的连接方式是RESTful风格的,使用http的方式进行连接 3.2 Transport 连接 端口 9300 这种连接方式对应于架构图中的Transport这一层,这种客户端连接方式是直接连接ES的节点,使用TCP的方式进行连接 4. ES提供了多种

Java Nio 十四、Java NIO vs. IO

最后更新时间:2014-06-23 当学习Java NIO和IO的API的时候,一个问题很快的就会出现中我们的脑中: 我什么时候应该使用IO,什么时候应该使用NIO? 在这篇文章中我将会尝试着写出中NIO和IO之间不同的地方,他们的使用场景,以及他们怎么影响你的代码设计. Java NIO和IO的主要不同 下面的表格总结了Java NIO和IO的主要不同.针对这个表格中的不同点我将会给予更加详细的说明. IO NIO 基于流的 基于缓冲区的 堵塞IO 非堵塞IO   Selectors(选择器)

java的几个版本以及jre,jdk等概念——【转载】JDK、Java SE、Java EE、Java ME我该选

我们平时使用的一些软件,有一部分需要Java环境的支持,但是SUN那么多的产品,让人眼花缭乱的版本号,前看后看都差不多的缩写,让我们选择起来的时候常常望而却步,只好跟着感觉走.所以下面我要介绍的就是那些让大家困惑的东西,首先让我们看看SUN的产品之多:下载地址:http://developers.sun.com/downloads/ 哈哈还没有展开它们的子选项呢,让人眼花缭乱,下面介绍大家使用的比较广泛的名词吧:(一)J2SEJava2平台标准版(Java2 Platform Standard

Java内存分配(直接内存、堆内存、Unsafel类、内存映射文件)

1.Java直接内存与堆内存-MarchOn 2.Java内存映射文件-MarchOn 3.Java Unsafe的使用-MarchOn 简单总结: 1.内存映射文件 读文件时候一般要两次复制:从磁盘复制到内核空间再复制到用户空间,内存映射文件避免了第二次复制,且内存分配在内核空间,应用程序访问的就是操作系统的内核内存空间,因此极大提高了读取效率.写文件同理. 2.堆内存分配与直接内存分配: Java申请空间时通常是从JVM堆内存分配的,即 ByteBuffer.allocate(int cap

Java--- J2EE、Java SE、Java EE、Java ME 区别

java SE=Java Standard EditionJava EE=Java Enterprise EditionJava ME=Java Mobile Edition SE主要用于桌面程序,控制台开发(JFC)EE企业级开发(JSP,EJB)ME嵌入式开发(手机,小家电) 目前,Java 2平台有3个版本,它们是适用于小型设备和智能卡的Java 2平台Micro版(Java 2 Platform Micro Edition,J2ME).适用于桌面系统的Java 2平台标准版(Java 2

JAVA程序员的前景如何,JAVA好学吗怎么自学?

JAVA在主流编程语言中的重要地位绝对可以排进TOP3,JAVA在C++的基础上扬弃发展,吸收优点,摒弃多继承.指针等难点.因此JAVA不但功能强大,而且简单易用,无论是学习还是使用都比C++更好上手. java还拥有广泛的应用市场,它的生态系统几乎涵盖了目前市面上所有的软硬件,java几乎是万能的,你能想到的,java基本都能实现. web开发:京东.淘宝.美团这些大型网站,都是用JAVA做的. 移动端开发:目前手机上所有的APP后台代码及部分移动端页面java是都能够做到的. 客户端开发:主

Java理解程序逻辑——第一章 初识Java

1. 计算机程序: 为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合. 2. JAVA相关的技术:      1).安装和运行在本机上的桌面程序      2).通过浏览器访问的面向Internet的应用程序      3).JAVA 还能做出非常炫的图像效果 3. 开发JAVA程序的步骤:               1).编写源程序               2).编译源程序               3).运行 4. JAVA程序的基本框架:          1).

【JAVA】【NIO】3、Java NIO Channel

Java NIO和流量相似,但有些差异: ·通道可读写,流仅支持单向.读或写 ·异步通道读取 ·通道读写器,他们是和Buffer交替 道的实现 下面是Java NIO中最重要的通道的实现: ·FileChannel ·DatagramChannel ·SocketChannel ·ServerSocketChannel FileChannel从文件读数据或写进文件 DatagramChannel通过UDP在网络上读写数据 SocketChannel通过TCP在网络上读写数据 ServerSock