NIO概览
NIO专题:http://developer.51cto.com/art/201112/307172.htm
一、新IO概述:
新IO和传统IO都是用于进行输入/输出,相比于传统IO面向流的处理方式,新IO采用内存映射文件来处理输入/输出,新IO将文件或文件的一段区域映射到内存中,这样就可以像访问内存一样来访问文件了,所以这种访问方式既方便又快得多。
新IO中的两个核心对象:Channel(通道)和Buffer(缓冲)。Channel用于新IO的数据传输,相对于传统IO中的InputStream和OutputStream,Channel提供了一个map()方法用来将一段数据映射成为一块内存。也就是在新IO中,改变了传统IO面向流的处理而转向面向块的处理方式。
Buffer是一个容器,它的本质是一个数组。发送到Channel的所有对象以及从Channel取出的所有数据先存放到Buffer中。
除了上面两个核心对象外,新IO还提供了Charset类用于将Unicode字符串映射成字节序列以及逆映射操作。以及Selector类用于支持非阻塞式输入输出。
二、Java中与新IO相关的包:
1.java.nio包:主要包含各种与Buffer相关的类
2.java.nio.channels包:主要包含与Channel和Selector相关的类
3.java.nio.charset包:主要包含与字符集相关的类
4.java.nio.channels.spi包:主要包含与Channel相关的服务提供者编程接口。
5.java.nio.charset.spi包:包含与字符集相关的服务提供者编程接口
三、Channel介绍以及使用
Channel可以直接将指定文件的部分或全部直接映射成Buffer,并且程序不能直接访问Channel中的数据,Channel只能与Buffer交互。
Channel接口提供了DatagramChannel、FIleChannel、SocketChannel、ServerSocketChannel等实现类。由此可见Channel是按功能进行了划分。
Channel所有的对象都不是通过构造器创建的,而是通过传统节点InputStream和OutputStream的getChannel()方法获得的。但是不同的节点获得的Channel对象也不同,是各自节点类型对应的Channel对象。例如:FileInputStream通过getChannel获得的Channel对象是FileChannel对象。
虽然Channel对象既可以读取也可以写入,但是InputStream获得的Channel只能读,OutputStream获得Channel对象只能写。
Channel中常用的方法:map()、read()、write(),read()和write()方法有一系列的重载形式,这些方法用于从Buffer中读或写数据。
四、Buffer的介绍及使用
Buffer可以保存多个类型相同的数据。Buffer是一个抽象类,最常用的子类是ByteBuffer,它可以在底层字节数组上进行get/set操作。另外还有其他的子类:CharBuffer、ShortBuffer、IntBuffer等。
Buffer中有三个重要的概念:容量(capacity)、界限(limit)、和位置(position)。
容量:缓冲区的容量,即最多可以存储多少数据,其中缓冲区的容量不可以为负数,创建后不容许改变。
界限:第一个不应该被读出或者写入的缓冲区位置索引,也就是以此为界限后面的区域无法读写数据。
位置:指明下一个可以被读出或者写入的缓冲区位置索引。
put()方法和get()用于放入、取出数据。
flip()方法,调用该方法后界限就回到原来的position所在位置。
clear()方法,将position设置为0。将limit设为与capacity相等。
五、字符集和Charset
所有的文件底层都是二进制文件,即全部都是字节码。把明文的字符转换成二进制序列称为编码,把二进制编码转换成明文字符串称为解码。JDK1.4之后提供了Charset类来处理字节序列和字符序列之间的转换关系,该类中包含用于解码和编码的方法。其中该类提供的availableCharset()方法来获取当前JDK所支持的所有字符集。
NIO概览的更多相关文章
- Netty网络编程之NIO概览与简单应用
>>关于NIO Java NIO即Java Non-blocking IO(Java非阻塞I/O),是Jdk1.4之后增加的一套操作I/O工具包,又被叫做Java New IO. (1)R ...
- Java NIO 概览
Java面试通关手册(Java学习指南) Github地址:https://github.com/Snailclimb/Java_Guide 一 NIO简介 Java NIO 是 java 1.4 之 ...
- 传统IO与NIO的比较
本文并非Java.io或Java.nio的使用手册,也不是如何使用Java.io与Java.nio的技术文档.这里只是尝试比较这两个包,用最简单的方式突出它们的区别和各自的特性.Java.nio提出了 ...
- Java NIO之Selector(选择器)
历史回顾: Java NIO 概览 Java NIO 之 Buffer(缓冲区) Java NIO 之 Channel(通道) 其他高赞文章: 面试中关于Redis的问题看这篇就够了 一文轻松搞懂re ...
- java 的nio与io对比
转:本文并非Java.io或Java.nio的使用手册,也不是如何使用Java.io与Java.nio的技术文档.这里只是尝试比较这两个包,用最简单的方式突出它们的区别和各自的特性.Java.nio提 ...
- 关于Java IO与NIO知识都在这里
由于内容比较多,我下面放的一部分是我更新在我的微信公众号上的链接,微信排版比较好看,更加利于阅读.每一篇文章下面我都把文章的主要内容给列出来了,便于大家学习与回顾. Java面试通关手册(Java学习 ...
- Java NIO之拥抱Path和Files
Java面试通关手册(Java学习指南)github地址(欢迎star和pull):https://github.com/Snailclimb/Java_Guide 历史回顾: Java NIO 概览 ...
- Java NIO 之 Channel(通道)
历史回顾: Java NIO 概览 Java NIO 之 Buffer(缓冲区) 其他高赞文章: 面试中关于Redis的问题看这篇就够了 一文轻松搞懂redis集群原理及搭建与使用 一 Channel ...
- Java NIO文章列表(强烈推荐 转)
IO流学习总结 一 Java IO,硬骨头也能变软 二 java IO体系的学习总结 三 Java IO面试题 NIO与AIO学习总结 一 Java NIO 概览 二 Java NIO 之 Buffe ...
随机推荐
- RESTful风格的SSM框架搭建
1 使用idea编辑工具,maven项目构建工具搭建RESTful风格的java项目 2 进行项目配置 2.1 pom文件依赖 <project xmlns="http://maven ...
- django之整体复习
1. 配置文件: media: avatar = models.FileField(upload_to='avatar') sessiongs MEDIA_ROOT=os.path.join(BASE ...
- GameObject非激活状态,触发测试
测试结果为OnEnable,Start不执行.Awake不管激活未激活都执行 不管是驻留在层级面板,还是手动拖上去. 但是,在任何时间设为激活.就会2个都触发.Awake和Start只触发一次.这个问 ...
- atitit。win7 win8 win9 win10 win11 新特性总结与战略规划
atitit.win7 win8 win9 win10 win11 新特性总结与战略规划 1. win7 1 1.1. 发布时间 2009年10月22日 1 1.2. 稳定性大幅提升,很少蓝屏死机 ...
- PHPStorm 10 激活
按照这篇东东的说法去做已经不行了~ 可以参考我的另外一篇~ 传送门: http://www.cnblogs.com/gssl/p/5686612.html 楼主的图片看不到,下面是我找到的.分享出来. ...
- 每日英语:When Social Skills Are A Warning
An uncle starts believing all your sarcastic comments. Or a kindhearted friend never understands any ...
- Nginx - Windows下Nginx初入门,附CentOS下Nginx的安装
公司刚使用nginx,预先学习下.鉴于机器没有Linux环境,在Windows熟悉下. 下载 目前(2015-07-11),nginx的稳定版本是1.8.0,在官网下载先,windows版的nginx ...
- 一定要使用-server参数来调试并发程序
在阅读JCIP的时候想手工测试一下,结果发现总是没有出现书中描述的并发问题 后来我琢磨,以前记得书上说过,在debugging的环境下,JVM是低并发的,一定要在server的环境下测试,让JVM在高 ...
- 匈牙利命名法、骆驼命名法、帕斯卡(pascal)命名法 C#命名规范
匈牙利命名法.骆驼命名法.帕斯卡(pascal)命名法 C#命名规范 一.匈牙利命名法:广泛应用于象Microsoft Windows这样的环境中. Windows 编程中用到的变量(还包括宏)的命名 ...
- 计算机网络——OSI、TCP/IP协议族详解
一.OSI七层协议体系结构域TCP/IP四层体系结构对比 ISO/OSI模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是 ...