Java NIO 小结

转载 2012年03月30日 09:48:26
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 NIO 读取文件、写入文件、读取写入混合

前言 Java NIO使用通道、缓冲来操作流,所以要深刻理解这些概念,尤其是,缓冲中的数据结构,当前位置、limit、容量 读取文件的样例代码 String pathname = "C:\\Use...

Java nio(文件读写 实例解析)

读写操作是I/O操作的基本行为;NIO中从Channel中读数据非常简单:创建一个buffer;通过一个channel完成buffer的数据读入;写数据同样简单:创建一个buffer;向其中填充数据;...
  • biexf
  • biexf
  • 2010-09-20 15:58
  • 23368

Java NIO 写文件

//将邮箱 姓名和最后生成的链接数据写入csv文件     private void writeCsv(String content, String fileName) throws IOExcep...

Java文件读写IO/NIO及性能比较总结

干Java这么久,一直在做WEB相关的项目,一些基础类差不多都已经忘记。经常想得捡起,但总是因为一些原因,不能如愿。 其实不是没有时间,只是有些时候疲于总结,今得空,下定决心将丢掉的都给捡起来。 文件...

java:NIO读写文件的示例

Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。 NIO方式读数据非常简单 创建一个缓冲区(ByteBuffer);通...
  • 10km
  • 10km
  • 2016-07-04 19:00
  • 1878

javanio中FileChannel写入文件write,追加文件,以及多文件合并

FileChannel   追加写入文件实现方法如下: File file = new File(filename) ; if(!file.exists()){ ...

java.io和java.nio性能简单对比

我从java1.3开始学习java,后来主要用1.4,再后来1.5和1.6中的很多新特性,都停留在“知道”的状态,比如nio,虽然据说可以提升性能,但并没有真正深入使用和测试过,工作操作文件的情况不多...
  • yczz
  • yczz
  • 2012-07-05 17:42
  • 4651

ByteBuffer用法小结(对刚接触NIO的童鞋有用)

在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区.缓冲区是定长的,基本上它只是一个列表,它的所有元素...

Java学习IO流小结--字节流

  • 2015-07-11 14:59
  • 218KB
  • 下载

java web的一些小结和应用

  • 2012-11-12 18:55
  • 105KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)