-
Java连载150-NIO详解(一)
一、IO原理
1.底层原理
-
操作系统在进行IO的时候,实际上并不是即时操作,它们是通过缓冲区的,也就是说,我们读写文件都是通过一个中介来进行的。读系统就是把内核缓存区的内容复制到进程缓冲区;写系统就是把进程缓冲区的内容复制到内核缓存区。 -
之所以这样做的原因是避免大量的IO操作,大量的IO操作效率是很低的。这个过程并不等价于数据在内核缓冲区和磁盘之间的交换。
2.
-
NIO和IO的实现方式有所不同,NIO实在JDK1.4之后引入的,采用的是块的实现方式,而IO采用流的实现方式
3.提供了两套API实现方式
-
标准输入输出的NIO -
网络编程的NIO
4.流与块的优缺点
-
基于流的IO,速度慢,但是为流式数据提供过滤器 -
基于块的IO,速度快,但是缺乏像流的雅兴和简单性
5.Buffer读取数据的步骤
-
将数据读取到buffer之中(buffer会记录写入了多少数据) -
调用flip()方法(将buffer从写模式变成读模式) -
在buffer中读取数据 -
调用clear()或者compact()方法(clear() 方法会清空整个缓冲区。compact() 方法只会清除已经读过的数据。任何未读的数据都被移到缓冲区的起始处,新写入的数据将放到缓冲区未读数据的后面。)
6.关于Channel
-
对Channel的读写必须通过buffer -
Channel是可以异步读写的 -
Channel是双向的,既可以读又可以写
7.NIO中的Channel有如下几种
-
FileChannel,文件中读取数据 -
DatagramChannel,读写UDP网络协议数据 -
SocketChannel,读写TCP网络协议数据 -
SocketServerChannel,可以监听TCP网络协议数据
二、源码:
-
CSDN:https://blog.csdn.net/weixin_44630050
出 处:https://www.cnblogs.com/ruigege0000/p/15681242.html
最新更新
带有参数的装饰器
类装饰器
django中的auth模块与admin后台管理
python的日期处理
字符串常用方法
基本数据类型概述
python-map()函数基本用法
python带你实现任意下载AcFun视频数据~
bbs项目之注册功能
变量的定义和使用
三大常用数据库事务详解之三:事务运行
三大常用关系型数据库事务详解之二:基
三大关系型数据库事务详解之一:基本概
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
VB.NET中如何快速访问注册表
ASP.NET中图象处理过程详解
Vue(1)Vue安装与使用
JavaScript 语言入门
js将一段字符串的首字母转成大写
纯原生html编写的h5视频播放器
H5仿原生app短信验证码vue2.0组件附源码地
TypeScript(4)接口
TypeScript(3)基础类型
TypeScript(2)WebStorm自动编译TypeScript配置