NIO的原理和文件读入读出及图片拷贝的使用
1.NIO的简介
java.nio 全称 java non-blocking IO 是jdk1.4之后出现的 New IO
为所有的原始类型(boolean除外)提供了缓存支持
使用它 可以提供非阻塞式的高伸缩性网络
NIO由三个核心部分组成
Channel 管道/通道
Buffer 缓冲区
Selector 选择器
普通IO NIO
面向流 面向缓冲区
阻塞IO 非阻塞
没有选择器 选择器Selector
阻塞和非阻塞:
阻塞:
Scanner sc = new Scanner(System.in)
int i = sc.nextInt();
阻塞是强调运行结果
在返回之前 当前线程会被挂起 一直处于等待状态
不能执行其他任务
函数只有在得到结果之后 才会返回
阻塞式IO 指的是
"一旦输入/输出工作没有完成 则程序阻塞 直到输入/输出完成为止"
不见黄河不死心
非阻塞:
非阻塞和阻塞的概念是相对应的
非阻塞IO其实并非完全非阻塞
通常情况下 都是通过设置超时来读取数据的
未超时之前 程序阻塞
超时之后 程序结束
Buffer:
缓冲区 本质上是一块可以存储数据的内存
把这块区域封装成了一个Buffer对象
Java NIO中涉及到的Buffer实现:
1.ByteBuffer
2.CharBuffer
3.DoubleBuffer
4.FloatBuffer
5.IntBuffer
6.LongBuffer
7.ShortBuffer
Selector:
实现监听的效果
通过一个线程管理多个Channel
从而管理多个网络连接的目的
它是Java NIO核心组件中的一个
用于检查一个或者多个NIO Channel的状态是否处于可读 可写
我们可以将Channle注册到Selector中 以实现Selector对其管理的目的
3.Buffer的使用
Java NIO 的Buffer 用于 和 NIO通道进行交互
数据从通道读入缓冲区
从缓冲区写出到通道中
常用方法:
1.allocate(大小) 分配一块指定大小的缓冲区
2.put() 向缓冲区写数据
3.get() 从缓冲区读数据
4.flip() 切换读写模式
5.clear() 清空
6.capacity() 获取缓冲区大小
7.position() 获取数据存储位置
8.limit() 长度



作用:
* 1.将position设置为0
* 2.把limit设置为原position的值 存了多少数据
使用步骤:
1.创建Buffer缓冲区
2.写入数据到Buffer
3.调用flip()方法 切换读写模式
4.从Buffer中读取数据
5.调用clear()方法 清空缓冲区

4.FileChannel的使用
java NIO 中的FileChannel 是一个连接文件的通道
可以通过通道 读写文件
在使用FileChannel之前 必须先打开它
1.可以通过
FileInputStream/FileOutputStream 来获取 FileChannel
getChannel()方法
2.调用 FileChannel中的静态open()方法 打开通道
static FileChannel open(Path path,OpenOption...options);
Paths 工厂类中 的方法
static Path get(URI uri) 将给定的URI转换为Path对象。
5.案例
写入文本文件

读取文本文件

复制图片

NIO的原理和文件读入读出及图片拷贝的使用的更多相关文章
- 全面解读Java NIO工作原理(1)
全面解读Java NIO工作原理(1) 2011-12-14 10:31 Rollen Holt Rollen Holt的博客 我要评论(0) 字号:T | T JDK 1.4 中引入的新输入输出 ( ...
- 全面解读Java NIO工作原理(4)
全面解读Java NIO工作原理(4) 2011-12-14 10:31 Rollen Holt Rollen Holt的博客 我要评论(0) 字号:T | T JDK 1.4 中引入的新输入输出 ( ...
- 全面解读Java NIO工作原理(3)
全面解读Java NIO工作原理(3) 2011-12-14 10:31 Rollen Holt Rollen Holt的博客 我要评论(0) 字号:T | T JDK 1.4 中引入的新输入输出 ( ...
- 全面解读Java NIO工作原理(2)
全面解读Java NIO工作原理(2) 2011-12-14 10:31 Rollen Holt Rollen Holt的博客 我要评论(0) 字号:T | T JDK 1.4 中引入的新输入输出 ( ...
- 将如下三组不同类型的数据利用DataInputStream和DataOutputStream写入文件,然后从文件中读出
三组数据如下: {19.99 , 9.99 , 15.99 , 3.99 , 4.99} {12 , 8 , 13 ,29 ,50} {"Java T-shirt" , " ...
- Java面试必问通信框架NIO,原理详解
NIO 流与块 通道与缓冲区 缓冲区状态变量 文件 NIO 实例 选择器 套接字 NIO 实例 内存映射文件 NIO与IO对比 Path Files NIO 新的输入/输出 (NIO) 库是在 JDK ...
- (前篇:NIO系列 推荐阅读) Java NIO 底层原理
出处: Java NIO 底层原理 目录 1.1. Java IO读写原理 1.1.1. 内核缓冲与进程缓冲区 1.1.2. java IO读写的底层流程 1.2. 四种主要的IO模型 1.3. 同步 ...
- java的nio之:java的nio的原理
转载:http://weixiaolu.iteye.com/blog/1479656 Java NIO原理图文分析及代码实现 前言: 最近在分析hadoop的RPC(Remote Procedure ...
- Hadoop之HDFS原理及文件上传下载源码分析(下)
上篇Hadoop之HDFS原理及文件上传下载源码分析(上)楼主主要介绍了hdfs原理及FileSystem的初始化源码解析, Client如何与NameNode建立RPC通信.本篇将继续介绍hdfs文 ...
随机推荐
- mysql启动报错ERROR! The server quit without updating PID file处理
从其它服务器拷贝编译安装后的MySQL5.7目录后启动时报错如下: ERROR! The server quit without updating PID file(/path/to/XXX.pid) ...
- linux sort排序命令的高级用法
在linux中,使用sort按行进行排序是很简单的.不过有时,生活总是爱抛给你一个一个的问题.如果使用sort按多个列值排列,同时使用tab作为分隔符,而且对于某些列需要进行逆序排列,这样sort命令 ...
- AndroidImageSlider
最核心的类是SliderLayout,他继承自相对布局,包含了可以左右滑动的SliderView,以及页面指示器PagerIndicator.这两部分都可以自定义. AndroidImageSlide ...
- C#面向对象--属性
一.属性(Property)作为类和结构的成员,是对字段的一种封装方式,实际上是一种特殊的方法,被称为访问器(Accessor),从而隐藏实现和验证代码,有助于提高字段读取和赋值的安全性和灵活性: 1 ...
- 由一个项目需求引发的 - textarea中的换行和空格
当我们使用 textarea 在前台编辑文字,并用 js 提交到后台的时候,空格和换行是我们最需要考虑的问题.在textarea 里面,空格和换行会被保存为/s和/n,如果我们前台输入和前台显示的文字 ...
- Java基础--选择排序
每一趟从待排序的数据元素中选出最小(或最大的)一个元素, 顺序放在已排好的序的数列的最后,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法. 选择排序的时间复杂度为 O(n^2). 第一次需 ...
- Python -Selenium的安装和调用
安装selenium步骤: 1.安装pip(cmd命令行管理员方式): pip install pip 也可直接搜索pip,到官网下载安装 2.安装selenium(cmd命令行管理员方式): pip ...
- Go性能分析大杀器PPROF
这是什么 想要进行性能优化,Go本身自带的工具链就包含了性能分析工具,而且也非常棒,pprof就是Go性能分析的利器,它是Go语言自带的包,有如下两种: runtime/pprof:采集程序(非 Se ...
- 关于在elasticSearch中使用聚合查询后只显示10个bucket的问题
先看下面es查询语句 { "size": 0, "aggs" : { "all_articleId" : { "terms&quo ...
- 关于Spring和SpringMVC的总结
1.Spring中AOP的应用场景.AOP原理.好处? 答:AOP:Aspect Oriented Programming面向切面编程:用来封装横切关注点,具体可以在下面场景中使用: Authenti ...