NIO(一)
1、NIO是什么?
是JDK1.4之后推出的一个新的IO操作(netty、mina通讯框架的底层都是NIO实现的连接)
2、NIO和IO的区别(阻塞只会出现在网络通讯中,都是同步)
NIO:非阻塞类型No-block-IO,通过Channel(通道)+Buffer(缓冲区)实现IO操作,NIO为双向缓冲流;数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中;
等服务器把数据加载完过后,再去读取
IO:阻塞类型block-IO,传统IO为单向(输入流和输出流只能执行一个)
如果网络传输很慢,程序就会一直等待,直到传输完为止
注:JDKS1.7之后,优化:
同步非阻塞:NIO(只有一个客户端去获取)
异步非阻塞:AIO(可以多个客户端去获取)
3、创建测试类(NIOBufferDemo)
package com.cppdy.nio; import java.nio.ByteBuffer; public class NIOBufferDemo { public static void main(String[] args) { ByteBuffer buf = ByteBuffer.allocate(1024); System.out.println("初始化之后的信息:");
// 当前指针位置
System.out.println("position:" + buf.position());
// 当前缓冲区已有的数据大小(首先要打开缓冲区)
System.out.println("limit:" + buf.limit());
// 缓冲区最大容量
System.out.println("capacity" + buf.capacity()); // 放入5个
buf.put("cppdy".getBytes());
System.out.println("放入值之后:");
System.out.println("position:" + buf.position());
System.out.println("limit:" + buf.limit());
System.out.println("capacity" + buf.capacity()); System.out.println("开启读之后的效果:");
// 开启读
buf.flip();
System.out.println("position:" + buf.position());
System.out.println("limit:" + buf.limit());
System.out.println("capacity" + buf.capacity()); byte[] bytes = new byte[buf.limit()];
buf.get(bytes); System.out.println("获取到的值:" + new String(bytes, 0, bytes.length)); System.out.println("获取值之后的效果:");
System.out.println("position:" + buf.position());
System.out.println("limit:" + buf.limit());
System.out.println("capacity" + buf.capacity()); System.out.println("开启重复读之后的效果:");
buf.rewind();
System.out.println("position:" + buf.position());
System.out.println("limit:" + buf.limit());
System.out.println("capacity" + buf.capacity()); System.out.println("清空缓冲区之后的效果:");
// 调用clear方法之后其实不是真正的清空缓冲区,只是把所有的信息复原而已
buf.clear();
System.out.println("position:" + buf.position());
System.out.println("limit:" + buf.limit());
System.out.println("capacity" + buf.capacity());
System.out.println("值:" + (char) buf.get());
} }
NIO(一)的更多相关文章
- 源码分析netty服务器创建过程vs java nio服务器创建
1.Java NIO服务端创建 首先,我们通过一个时序图来看下如何创建一个NIO服务端并启动监听,接收多个客户端的连接,进行消息的异步读写. 示例代码(参考文献[2]): import java.io ...
- BIO\NIO\AIO记录
IO操作可以分为3类:同步阻塞(BIO).同步非阻塞(NIO).异步(AIO). 同步阻塞(BIO):在此种方式下,用户线程发起一个IO操作以后,必须等待IO操作的完成,只有当真正完成了IO操作以后, ...
- 支撑Java NIO 与 NodeJS的底层技术
支撑Java NIO 与 NodeJS的底层技术 众所周知在近几个版本的Java中增加了一些对Java NIO.NIO2的支持,与此同时NodeJS技术栈中最为人称道的优势之一就是其高性能IO,那么我 ...
- Java I/O and NIO [reproduced]
Java I/O and NIO.2---Five ways to maximize Java NIO and NIO.2---Build more responsive Java applicati ...
- JAVA NIO学习笔记1 - 架构简介
最近项目中遇到不少NIO相关知识,之前对这块接触得较少,算是我的一个盲区,打算花点时间学习,简单做一点个人学习总结. 简介 NIO(New IO)是JDK1.4以后推出的全新IO API,相比传统IO ...
- Java NIO概述
Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然 Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Se ...
- JAVA NIO Socket通道
DatagramChannel和SocketChannel都实现定义读写功能,ServerSocketChannel不实现,只负责监听传入的连接,并建立新的SocketChannel,本身不传输数 ...
- JAVA NIO FileChannel 内存映射文件
文件通道总是阻塞式的. 文件通道不能创建,只能通过(RandomAccessFile.FileInputStream.FileOutputStream)getChannel()获得,具有与File ...
- java nio系列文章
java nio系列教程 基于NIO的Client/Server程序实践 (推荐) java nio与并发编程相关电子书籍 (访问密码 48dd) 理解NIO nio学习记录 图解ByteBuff ...
- (转)NIO与AIO,同步/异步,阻塞/非阻塞
原文地址: http://www.cnblogs.com/enjoy-ourselves/p/3793771.html 1.flip(),compact(),与clear()的使用 flip()内部实 ...
随机推荐
- 第26月第20天 springboot
--------------------- 1.pom.xml中添加支持web的模块: <dependency> <groupId>org.springframework.bo ...
- 关于ajax及相关数据传输问题
之前整理的ajax相关应用笔记,一直没有时间整理,今天突然翻到特此将初稿大概的整理了一下,可能有点乱,欢迎指出不足之处. jQuery的ajax请求:complete函数一般无论服务器有无数据返回都会 ...
- Linux调试
参考文章: http://mp.weixin.qq.com/s/Kz4tii8O4Nk-S4SV4kFYPA 各类调试工具: 参考链接: http://www.brendangregg.com/li ...
- You Only Look Once: Unified, Real-Time Object Detection(翻译)
0 - 摘要 我们提出了YOLO,一种新的物体检测方法.之前的物体检测工作是通过重新使用分类器来进行检测.相反,我们将对象检测抽象为一个回归问题,描述为以空间分隔的边界框和相关的类别概率.一个简单的神 ...
- vue购物车实战项01
1. 关于挂载点 2.图片路径 这样的引入方式 是直接文件夹下myVue 3.import 不能用绝对路径 只能用相对路径 图片可以绝对路径 4.引入组件步骤 1.引入组件 @的含义在配置里面可以 ...
- python第四天,list补充
当我们创建的列表中,元素的排列顺序常常是无法预测的,因为我们并非总能控制用户提供数据的顺序.这虽然在大多数情况下都是不可避免的,但我们经常需要以特定的顺序从呈现信息.有时候,我们希望保留列表元素最初的 ...
- DAC杂谈二 ——ADC和DAC常用技术术语
采集时间 采集时间是从释放保持状态(由采样-保持输入电路执行)到采样电容电压稳定至新输入值的1 LSB范围之内所需要的时间.采集时间(Tacq)的公式如下: 混叠 根据采样定理,超过奈奎斯特频率的输入 ...
- VC 为程序创建快捷方式的详细讲解
有时候,为了方便用户使用我们编写的程序,需要在桌面,快速启动或程序组中创建程序的快捷方式.下面就介绍在VC下如何为程序创建快捷方式. 一.得到桌面,快速启动或程序组的路径这里介绍二个win32 API ...
- ESXI常用命令
1.简介 VMware vSphere ESXi6.0常用命令使用,对于一些个人认为比较常用的命令进行总结,如果读者需要了解更多请访问VMware官网下载文档,链接如下:https://www.vmw ...
- localtime函数和strftime函数
localtime函数 功能: 把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间,而gmtime函数转换后的时间没有经过时区变换,是UTC时间 . 用法: #include & ...