首页 > 编程语言 > 详细

Java文件与io——NewIO

时间:2016-01-12 13:35:29      阅读:194      评论:0      收藏:0      [点我收藏+]

为啥要使用NIO?

NIO的创建目的是为了让JAVA程序员可以实现高速I/O而无需编写自定义的本机代码。NIO将最耗时的I/O操作(即填充和提取缓冲区)转移回操作系统,因而可以极大地提高速度

流与快的比较

原来的I/O库(在java.io.*中)与NIO最重要的区别是数据打包和传输的方式,原来的I/O以流的方式处理数据,而NIO以快的方式处理数据。

面向流的I/O系统一次一个字节地处理数据。一个输入流产生一个字节的数据,一个输出流消费一个字节的数据。不利的一面是,面向流的I/O通常相当慢。

一个面向快的I/O系统以快的形式处理数据。每一个操作都在一步中产生或消费一个数据块。按快处理数据比按(流式的)字节处理数据要快的多,但是面向快的I/O缺少一些面向流的I/O所具有的优雅性和简单性。

缓冲区

在NIO库中,所有数据都是用缓冲区处理的。在读取数据时,它是直接读取到缓冲区中的,在写入数据时,它是写入到缓冲区中的。任何时候访问NIO中的数据,都是将它放到缓冲区中

缓冲区实质上一个数组。通常它是一个字节数组,但是也可以使用其他种类的数组。但是一个缓冲区不仅仅是一个数组。缓冲区提供了对数据的结构化访问,而且还可以跟踪系统的读/写进程。

缓冲区类型

最常用的缓冲区类型是ByteBuffer。一个ByteBuffer可以在其底层字节数组上进行get/set操作(即字节的获取和设置)。ByteBuffer不是NIO中唯一的缓冲区类型。事实上,对于每一种基本java类型都有一种缓冲区类型:

ByteBuffer   CharBuffer  ShortBuffer  IntBuffer  LongBuffer  FloatBuffer  DoubleBuffer

缓冲区内部细节:

状态变量

可以用三个值指定缓冲区在任意时刻的状态:

position                             limit         capacity

技术分享

 

 

public class NIIODemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("----------");
        ByteBuffer buf=ByteBuffer.allocate(10);
        System.out.println("position="+buf.position());
        System.out.println("limit="+buf.limit());
        System.out.println("capacity="+buf.capacity());
        System.out.println("----------");
        buf.put((byte) 10);
        byte[] bs={20,30,40};
        buf.put(bs);
        ByteBuffer buf1=ByteBuffer.allocate(10);
        System.out.println("position="+buf.position());
        System.out.println("limit="+buf.limit());
        System.out.println("capacity="+buf.capacity());
        System.out.println("----------");
        buf.flip();//反转,将position回到初始位置,limit等于position的值
        ByteBuffer buf2=ByteBuffer.allocate(10);
        System.out.println("position="+buf.position());
        System.out.println("limit="+buf.limit());
        System.out.println("capacity="+buf.capacity());
        System.out.println("----------");
        
        //取值
        //返回当前位置与限制之间的元素
        for(int i=0;i<buf.remaining();i++){
            System.out.println(buf.get(i));
        }
    }

}

技术分享

 

Java文件与io——NewIO

原文:http://www.cnblogs.com/shenhainixin/p/5123878.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!