afa的专栏

每天进步一点点

Java NIO 小结
http://hi.baidu.com/boywell/blog/item/2bde80f9b967cd05d9f9fdb6.html

1, NIO 不是来替代传统IO的,传统的IO经过改写,效率也有了很大的提升;

2,NIO的两个核心概念:Buffer 抽象类 & Channel 接口;

3,Buffer及其子类不依赖于Channel对象使用,反过来,Channel对象需要使用Buffer对象

4,Buffer 翻译成“缓冲器”比“缓冲区”更好,前者暗示了Buffer除了维护一个底层的数据结构外,还拥有其他管理这个数据机构的功能(职责);

     Java NIO 为除了boolean类型外的基本类型提供了Buffer子类,如IntBuffer.最常用的是ByteBuffer。关于Buffer的内部结构值得研究,有一些APIs专门用来维护Buffer内部的数据结构,见Java docs.

5,Buffer可以分为直接buffer和间接buffer。

     JVM有自己的专属内存区域,OS也有自己的系统区域,通常JVM从外存读取一个数据,需要从OS的系统区拷贝到自己的内存区域,这是间接buffer。直接Buffer就是JVM让OS直接操作自己的内存区,不用在copy了,这样IO性能就上去了,但是如果不是非常注重性能,就不要使用直接Buffer, 因为构建一个直接Buffer也需要代价的。

      ByteBuffer directByteBuffer = ByteBuffer.allocateDirect(1024); //只有ByteBuffer有此工厂方法

6,Channel 可以看成是通往某一数据源的连接,通过该连接你可以对相应的数据源进行操作。文件FileChannel 只能从FileInputStream 或者FileOutputStream中获得。

7,对比5,NIO提供了MappedByteBuffer类,该类的对象可以从Channel获得,建立起了从文件到OS内存的直接映射,只要对该对象的任何改动,就会立刻回写到磁盘文件中,由于使用的是OS的内存区而不是JVM的,加上通常情况下,JVM的读写操作最终还是要OS去执行,这就使得读写效率很高,依赖于具体的OS平台系统。

阅读更多
个人分类: Java基础知识
想对作者说点什么? 我来说一句

java NIOjava并发编程的书籍

2011年11月13日 3.87MB 下载

JavaNIO chm帮助文档

2017年10月09日 163KB 下载

JAVA NIO 实现网络编程

2011年09月27日 188KB 下载

java NIO文档

2017年12月20日 1.81MB 下载

java nio 包读取超大数据文件

2010年12月19日 26KB 下载

java NIO 中文版

2012年03月06日 2.12MB 下载

java nio 读文件

2011年12月21日 901B 下载

没有更多推荐了,返回首页

不良信息举报

Java NIO 小结

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭