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.案例
写入文本文件
读取文本文件
复制图片
转载于:https://www.cnblogs.com/wanghuaying/p/9457495.html
NIO的原理和文件读入读出及图片拷贝的使用相关推荐
- ImageCLEF数据集处理(Python读取txt内容创建文件夹;将图片拷贝至指定文件夹)
1. 问题描述 做迁移时候用到公共数据集ImageCLEF, 但是给的结构如图: 有b,c,i, p四种图像数据,和list数据,对应每一条数据的名称及其标签,记录举例如下: b/252.car-si ...
- php读取图片文件流,详解php文件包含原理(读取文件源码、图片马、各种协议、远程getshell等)...
详解php文件包含原理(读取文件源码.图片马.各种协议.远程getshell等) 作者是namezz (看完图相当于做了一轮实验系列) 现有文件代码如下 1.png (21.16 KB, 下载次数: ...
- include详解 shell_详解php文件包含原理(读取文件源码、图片马、各种协议、远程getshell等) ......
详解php文件包含原理(读取文件源码.图片马.各种协议.远程getshell等) 作者是namezz (看完图相当于做了一轮实验系列) 现有文件代码如下 include和include_once.re ...
- c语言 从文件读入数组,C++ 将一个文件读入数组再读出数组的方法
如下所示: #include #include using namespace std; #define MAX_PACK_SIZE 10240 void main() { char filePath ...
- nio 读取目录所有文件_在NIO.2中使用文件和目录
nio 读取目录所有文件 在先前的文章中,我讨论了文件和目录的创建( 创建文件和目录 )以及选择( 列出和过滤目录内容 ). 采取的最后一个合乎逻辑的步骤是探索我们如何使用它们以及如何使用它们. 这是 ...
- 在NIO.2中使用文件和目录
在先前的文章中,我讨论了文件和目录的创建( 创建文件和目录 )以及选择( 列出和过滤目录内容 ). 采取的最后一个合乎逻辑的步骤是探索我们如何使用它们以及如何使用它们. 这是库的一部分,它经过了重新设 ...
- 在java读字符串入文件_如何在java中将文件读入字符串?
我已经将文件读入String. 该文件包含各种名称,每行一个名称. 现在的问题是我想在String数组中使用这些名称. 为此我写了以下代码: String [] names = fileString. ...
- 读入的字节都写入字节数组中_使用Java将文件读入字节数组的7个示例
读入的字节都写入字节数组中 嗨,大家好,Java程序员经常在现实世界中遇到编程问题,他们需要将文件中的数据加载到字节数组中,该文件可以是文本文件或二进制文件. 一个示例是将文件的内容转换为String ...
- 用Java将文件读入字节数组的7个示例
嗨,大家好,Java程序员经常在现实世界中遇到编程问题,他们需要将文件中的数据加载到字节数组中,该文件可以是文本或二进制文件. 一个示例是将文件的内容转换为String以便显示. 不幸的是,用于表示文 ...
最新文章
- 生成树协议,stp使用哪两个参数来选举根网桥?
- Spring 事务管理高级应用难点剖析
- 支持app需要多大的服务器,上海app开发需要多大服务器空间?
- 多视图几何总结——单应矩阵和基础矩阵的兼容关系
- “24小时城市图鉴”看人间,每个城市都有属于她的独特记忆!
- 【转】ABP源码分析十八:UI Inputs
- 【OpenGL】游戏编程常用TGA图像格式详解以及加载纹理编程实现
- 文件服务器 ip,共享文件服务器的ip地址
- 人工智能趋势:语音识别发展前景广阔
- 【linux笔记】常用命令(2)目录
- hiho一下 第二十九周 最小生成树三·堆优化的Prim算法【14年寒假弄了好长时间没搞懂的prim优化:prim算法+堆优化 】...
- 乌班图 修改ip_unbuntu(乌班图)虚拟机修改ip地址NAT模式
- 苹果一体机电脑计算机图标找不到,mac电脑airplay图标不见了怎么办
- python识别图片文字_python实现简单图片文字识别翻译OCR
- 2022注册测绘师备考开始 还在不知所措?手把手教你怎么考?
- 踩坑系列《十一》完美解决阿里云vod视频点播无法播放音频和视频点播控制台里的媒资库里面的视频无法播放
- niushop分销版开源商城旗舰版v3.7商城源码旗舰版PJ版
- 工业计算机英语作文,工业计算机,Industrial Computer,音标,读音,翻译,英文例句,英语词典...
- Netlogon漏洞复现
- 服务网关(Gateway)自定义全局过滤器统一Token处理
热门文章
- 摩托入门第一课[老猫]
- node 中npm start 做了哪些事情
- springboot 健康饮食
- Swoft 定时任务
- 天猫精灵 python_树莓派通过snowboy唤醒引擎(Python2、Python3的都可以),自定义唤醒词、关键字,达到小爱同学、天猫精灵一样的唤醒方式的全套教程...
- python pygame实现五子棋双人联机(简约版)
- TFT液晶屏驱动移植
- 跨模态行人重识别:Hetero-Center Loss for Cross-Modality Person Re-Identification
- 经过负载均衡图片加载不出来_吐血输出:2万字长文带你细细盘点五种负载均衡策略。...
- 一套停车场管理软件附带源代码 J2EE服务端+android客户