Java NIO学习
来源:互联网 发布:杂志订阅 知乎 编辑:程序博客网 时间:2024/05/17 22:21
概述
NIO是一种基于缓存的、非阻塞的异步IO。NIO主要涉及到三个概念:Buffer(缓存),Channel(通道),Selector(选择器)。NIO和传统IO不同在于:NIO是基于缓存的,而传统IO是基于流的,传统IO的数据是从一个出发地流向一个目的地,而NIO的数据是从一个Buffer通过Channel流向另一个Buffer的。这样,线程就可以将IO过程交给Channel去管理,自己可以做其它是,所以NIO也是异步的,非阻塞的,而传统IO在IO过程中必须等待,是同步的,阻塞的。NIO通过Selector可以监听多个Buffer的事件,并响应事件对IO结果进行处理,这样,就可以用一个线程实现监听多个通道,对于单核处理器来说,这会提高性能。总的来说,就是:
(1)NIO是异步的,非阻塞的
(2)NIO是基于缓存的
(3)NIO即可读又可写,是双向的。
(4)NIO提供selector,可以用单线程实现多个通道的监听
Channel
通道用来操作Buffer,通过通道,可以写入数据到Buffer,或者从缓存读取数据。
打开通道
RandomAccessFile file = new RandomAccessFile("d://sample.txt","rw");FileChannel fileChannel = file.getChannel();
这里打开的是一个FileChannel,当然还有其他类型的通道,参看:Java NIO Channel
Buffer
Buffer是缓存,是一个内存区块,可供channel写入或读取。
创建Buffer
ByteBuffer buffer = ByteBuffer.allocate(48);
切换工作模式
Buffer有两种工作模式“读取”和“写入”,读取之前,要调用filp()
切换到读取模式:
//切换到读取模式buffer.flip();//读取数据while(buffer.hasRemaining()){ char word =(char)buffer1.get();}
同样,写入之前调用clear()
方法,清空buffer数据,准备写入:
buffer.clear();fileChannel.read(buffer );
Seletor
用来监听多个通道,没用过感触不深,还是看参考文档靠谱!
参考文档:http://tutorials.jenkov.com/ ,非常不错的网站
0 0
- java.nio包学习
- Java Nio学习笔记
- java nio 缓冲区学习
- Java之nio学习
- java nio学习
- JAVA NIO学习
- Java NIO 学习
- Java NIO学习
- java NIO 入门学习
- JAVA NIO学习
- Java NIO学习笔记
- Java NIO 学习demo
- java nio学习资料
- java.nio-学习
- java NIO实例学习
- java nio学习(四)
- java NIO 学习笔记
- Java nio学习
- windows下python的NumPy、SciPy、matplotlib安装
- scala基础25-闭包
- js倒计时(每个小时特定时间抽奖)
- 多多的故事
- HDU 1506 Largest Rectangle in a Histogram(最大矩形面积、单调栈)
- Java NIO学习
- 使用FFmpeg4android 实现视频 水印 剪切 压缩 旋转
- [JS]Nodepad++配置Node.JS开发环境——windows
- 【Codeforces 612c】
- Java垃圾回收(二)垃圾收集算法---深入理解Java虚拟机
- POJ 2484 A Funny Game
- mysql 学习第七天
- 374. Guess Number Higher or Lower
- php环境配置