Java NIO 学习(一)--简介
来源:互联网 发布:淘宝信用卡付款手续费 编辑:程序博客网 时间:2024/05/22 06:56
一、简介
Java NIO (New IO)是JDK1.4后引入的新输入/输出API,提供基于缓冲区(buffer)的块写入/读取,而以前的I/O是基于流(Stream)的方式,NIO基于块的IO操作,将最耗时的缓存区读取和填充交由底层操作系统实现,因此速度上要快得多;主要由以下三个核心部分组成:
1. channel
2. buffer
3. selector
二、channel - 通道
通道可以理解为以前的“流”,数据从通道读取,也可以向通道写入数据,是双向的,但是读取和写入都必须是使用buffer,即读取数据时,需要从通道读取到缓存区,然后再从缓冲区获取数据,写入数据也需要先将数据写入到缓存区,再将缓冲区写入通道;
NIO中主要有以下通道类型:
- FileChannel - 文件IO
- DatagramChannel - UDP传输
- SocketChannel - TCP传输
- ServerSocketChannel -TCP传输
三、buffer - 缓冲区
缓冲区可以认为是一个数据容器,可以理解为一个基本数据类型数组,如字节数组等;NIO中任何数据输入/输出都是必须经由缓冲区实现,主要有以下缓冲区类型:
- ByteBuffer
- CharBuffer
- ShortBuffer
- IntBuffer
- LongBuffer
- FloatBuffer
- DoubleBuffer
- MappedByteBuffer
可以看出以上类型覆盖java的全部基本类型,MappedByteBuffer(内存映射文件,后续章节讲解)对于每种buffer都有相同的方法,只有ByteBuffer拥有部分特殊的方法
四、selector - 选择器
选择器支持单个线程处理多个channel,将多个channel注册到一个选择器中,选择器基于事件的方式处理;从选择器获取注册channel中关注的事件(如读、写)并进行数据处理,非常适用于多个数据量不大、读写不频繁的通道,使用单个线程来处理;
五、NIO简单(标准)的输入/输出
一个简单(标准)的NIO输入输出一般包含如下步骤:
1. 从数据源获取通道
2. 分配缓冲区
3. 切换缓存区为写模式
4. 从通道读取数据写入缓冲区
5. 切换缓冲区为读模式
6. 缓冲区数据写入通道中
7. 关闭资源
实例代码如下:
public class FirstReadAndWriteTest { public static void main(String[] args) throws IOException { RandomAccessFile fromFile = new RandomAccessFile("D:/tmp/NIO/fromFile.txt", "rw"); RandomAccessFile toFile = new RandomAccessFile("D:/tmp/NIO/toFile.txt", "rw"); //获取channel FileChannel fromChannel = fromFile.getChannel(); FileChannel toChannel = toFile.getChannel(); //分配buffer ByteBuffer buffer = ByteBuffer.allocate(1024); while (true) { //切换到写入模式 buffer.clear(); //从channel读取数据到buffer int read = fromChannel.read(buffer); if (read == -1) { break; } //切换到读模式 buffer.flip(); //buffer中内容写入到目标channel toChannel.write(buffer); } //关闭资源 fromChannel.close(); toChannel.close(); fromChannel.close(); toChannel.close(); }}
本章节只是Java NIO学习的第一章,主要是对主要核心的三个类的简单描述,具体详细内容在后面章节继续分享;
- Java NIO 学习(一)--简介
- java学习-NIO(一)简介
- NIO学习一、NIO简介
- Java NIO (一)--简介
- Java-NIO(一):简介
- Java NIO学习一
- NIO学习(一) java nio介绍
- Java NIO系列教程(一)java NIO简介
- Java 之NIO(一) - 简介(Buffer)
- Java NIO学习(一)
- Java NIO 学习(一)
- java nio学习(一)
- Java NIO学习(一)
- java nio学习(一)
- JAVA NIO学习笔记1 - 架构简介
- 学习 java netty (一) -- java nio
- Java NIO 之 NIO 简介
- Java NIO学习(一)NIO相关概念
- VMware虚拟机中显示CPU不支持VT的解决方法
- poj1328 Radar Installation 贪心
- smarty入门教程
- TheDAO被攻击事件考察报告
- 为什么用copy for NSString属性?
- Java NIO 学习(一)--简介
- java组合模式(Composite)-结构性
- div反弹
- Unity-【编辑器扩展】一键批量修改预设UGUI Text字体
- java判断字符串是否为空的方法总结
- git 本地存在的工程上传到指定仓库
- how to register a cell for UITableViewCell
- 为Centos6.5配置KVM环境
- BZOJ2006——[NOI2010]超级钢琴