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()内部实 ...
随机推荐
- 第28月第5天 uibutton交换方法
1. //交换系统的方法 @implementation UIControl (MYButton) + (void)load { Method a = class_getInstanceMethod( ...
- xshell操作
(1)命令ls——列出文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当前目录下以字母a开头的所有文件 ls -l *.doc 给出当前目录下以. ...
- IntelliJ IDEA 配置
1.让IntelliJ IDEA 驼峰选择生效 驼峰选择,就是选择的时候按照驼峰规则选择单词,不是选择整个单词 让IntelliJ IDEA 驼峰选择生效 2.查看当前类中的所有方法 Alt+7 3. ...
- linux 安装图行界面
centos6的环境中 代码:[root@ebs122 sysconfig]#yum groupinstall "Desktop" 使用 init 5命令进入图形化界面,如果成功的 ...
- Open-Drain与Push-Pull【转】
转自:https://www.cnblogs.com/zhangpengshou/p/3643546.html GPIO的功能,简单说就是可以根据自己的需要去配置为输入或输出.(General Pur ...
- iphoneX适配!!!
方法1.js判断(以下采用Jquery) //适配iphonex && $(window).height() === && window.devicePixelRati ...
- UDP可靠传输那些事
有空来论坛走走,发现讨论udp可靠传输又热了起来,有人认为udp高效率,有人认为udp丢包重传机制容易控制,还有朋友搞极限测试,当然也有人推销自己的东西,这里写一点我个人的看法. udp可靠传输其实非 ...
- 【转】drop、truncate和delete的区别
(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行回滚操作. TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删 ...
- codeforces 416div.2
A CodeForces 811A Vladik and Courtesy B CodeForces 811B Vladik and Complicated Book C CodeFo ...
- Mudo C++网络库第十章学习笔记
C++编译链接精要 C++语言的三大约束: 与C兼容, 零开销(zero overhead)原则, 值语义; 兼容C语言的编译模型与运行模型, 也就是锁能直接使用C语言的头文件和库; 头文件包含具有传 ...