Java NIO Overview
Java NIO Overview
Java NIO consist of the following core components:
- Channels
- Buffers
- Selectors
Java NIO has more classes and components than these, but the Channel, Buffer and Selector forms the core of the API, in my opinion. The rest of the components, like Pipe and FileLock are merely utility classes to be used in conjunction with the three core components. Therefore, I'll focus on these three components in this NIO overview. The other components are explained in their own texts elsewhere in this tutorial. See the menu at the top corner of this page.
Channel, Buffer and Selector 是三个主要的东西,Pipe and FileLock 是要和这三个一起使用的
Channels and Buffers
如图所示,Channel有点像流,从buffer里读写数据
Typically, all IO in NIO starts with a Channel. A Channel is a bit like a stream. From the Channel data can be read into a Buffer. Data can also be written from a Buffer into a Channel. Here is an illustration of that:
![]() |
| Java NIO: Channels read data into Buffers, and Buffers write data into Channels |
There are several Channel and Buffer types. Here is a list of the primary Channel implementations in Java NIO:
Channel有如下几中类型,覆盖了 TCP,UDP,文件io
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
As you can see, these channels cover UDP + TCP network IO, and file IO.
There are a few interesting interfaces accompanying these classes too, but I'll keep them out of this Java NIO overview for simplicity's sake. They'll be explained where relevant, in other texts of this Java NIO tutorial.
Here is a list of the core Buffer implementations in Java NIO:
一些buffer类型
- ByteBuffer
- CharBuffer
- DoubleBuffer
- FloatBuffer
- IntBuffer
- LongBuffer
- ShortBuffer
These Buffer's cover the basic data types that you can send via IO: byte, short, int, long, float, double and characters.
Java NIO also has a MappedByteBuffer which is used in conjunction with memory mapped files. I'll leave this Buffer out of this overview though.
Selectors
一个selector可以管理多个Channel,这个非常适合,你的connection很多,但是么个连接的流量又很低的情况。如聊天
A Selector allows a single thread to handle multiple Channel's. This is handy if your application has many connections (Channels) open, but only has low traffic on each connection. For instance, in a chat server.
Here is an illustration of a thread using a Selector to handle 3 Channel's:
![]() |
| Java NIO: A Thread uses a Selector to handle 3 Channel's |
To use a Selector you register the Channel's with it. Then you call it's select() method. This method will block until there is an event ready for one of the registered channels. Once the method returns, the thread can then process these events. Examples of events are incoming connection, data received etc.
要用selector你需要往它里面注册Channel,通过select()方法,这个方法会一直阻塞到待注册通道准备好,方法返回,这个线程就可以做其他的事情了。
Java NIO Overview的更多相关文章
- Java NIO 完全学习笔记(转)
本篇博客依照 Java NIO Tutorial翻译,算是学习 Java NIO 的一个读书笔记.建议大家可以去阅读原文,相信你肯定会受益良多. 1. Java NIO Tutorial Java N ...
- Java NIO Tutorial
Java NIO Tutorial Jakob JenkovLast update: 2014-06-25
- Java NIO:NIO概述
Java NIO:NIO概述 在上一篇博文中讲述了几种IO模型,现在我们开始进入Java NIO编程主题.NIO是Java 4里面提供的新的API,目的是用来解决传统IO的问题.本文下面分别从Java ...
- [翻译]java nio 概述
原文地址:http://tutorials.jenkov.com/java-nio/overview.html java NIO 包含一下核心内容: Channels Buffers Selector ...
- Java NIO学习笔记一 Java NIO概述
Java NIO概述 Java NIO(新的IO)是Java的替代IO API(来自Java 1.4),这意味着替代标准的 java IO和java Networking API.Java NIO提供 ...
- Java NIO核心组件简介
原文链接:http://tutorials.jenkov.com/java-nio/overview.html NIO包含下面几个核心的组件: Channels Buffer Selector 整个N ...
- Java NIO学习笔记---I/O与NIO概述
文章目录: 1.什么是IO 2.什么是Java NIO 3.I/O常见概念 4.为什么使用NIO 5.IO VS NIO 一.什么是IO I/O 或者输入/输出 , 指的是计算机与外部世界或者一个程序 ...
- Java NIO (1)
Java NIO (1) 看了下java核心技术这本书 关于nio的部分介绍比较少,而且如果自己写服务器的话nio用的还是比较多,整理一下nio的资料 java中nio主要是三个组件 Buffers ...
- 【转载】Java NIO学习 & NIO BIO AIO 比较
可以参考这个页面: http://www.iteye.com/magazines/132-Java-NIO (下面这个页面也有) http://ifeve.com/overview/ 另,在这篇文章里 ...
随机推荐
- 【Selenium-WebDriver自学】Selenium-IDE不同的浏览器(八)
==================================================================================================== ...
- TessorFlow学习 之 序言
2017.10.23日记录: 感觉平时自己学的还不错的,可是面试的时候才发现自己是个渣渣~~,真的感觉学习不能闭门造车! 面试了图像处理算法工程师-->> 1.精通哪门语言?C.C++.P ...
- Java 时间类
1.System 类 2.Date 类 3.SimpleDateFormate 类 4.Calendar 类 1.System 类 得到当前的时间值.System 类不能被实例化,需要通过它的静态方法 ...
- Thinkphp时间转换与统计的问题
1.thinkphp一般存入的都是时间戳,如果希望输入时直接显示格式化的时间呢: a. sql语句: SELECT DATE_FORMAT(create_time,'%Y%u') weeks,COUN ...
- [Unity动画]01.HasExitTime & ApplyRootMotion
参考链接: https://www.cnblogs.com/hammerc/p/4828774.html 资源下载: https://assetstore.unity.com/packages/ess ...
- JSP 静态文件路径配置
在JSP中,往往需要引入一些静态文件. 例如这样引用. 往往因为目录结构的问题,不知道是用点还是 .../ ./ ../表示相对当前路径的上一级目录:./表示相对当前的路径: 这里有个快捷的办法. l ...
- IntelliJ IDEA 添加junit插件
一.使用idea做junit测试需要添加junit插件 1.安装插件 File-->settings-->Plguins-->Browse repositories-->输入J ...
- 14.json文件读取
json文件读取 1.#读取json import json str='''[ { "name":"Tom", "gender":" ...
- EXCEL中统计单元格内容出现次数
参考网站: https://jingyan.baidu.com/article/7c6fb428dfcc9580642c90ae.html 统计单元格内容出现次数是工作中经常会涉及到的问题. 那么,如 ...
- 微信支付开发出现redirect_uri参数错误的解决方法
我们在进行微信支付开发的时候会遇到出现“redirect_uri参数错误”这种情况,怎么办呢?下面就是我总结出现这种“redirect_uri参数错误”的七种可能情况,以及解决方式. 1.可能原因①: ...

