JAVA NIO(new IO)

1.简介

        Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。

1.1.IO和NIO的区别:

IO和NIO的区别
IO NIO
面向流(Stream Oriented) 面向缓冲区(Buffer Oriented)
阻塞IO(Blocking IO) 非阻塞IO(NonBlocking IO)

1.1.1 面向流和面向缓冲区:

        传统的IO再进行数据传输的时候,会根据输入和输出的不同分别建立不同的链接,传输的数据会转化成数据流的形式在链接中传输,就像自来水流在自来水管中传输,电流在电线中传输一样。

        面向缓冲区的NIO在传输数据的时候,会在输入和输出之间建立通道,然后将数据放入缓冲区,缓冲区通过通道在输入和输出之间传输。这时候的传输模型就像快递一样,我们只需要把快递放到快递投递点,如何传输就只需要交给快递员传输就可以了。

2.通道与缓冲区

        在JAVA NIO中的通道和缓冲区是什么?

        通道表示程序跟IO设备之间的链接,缓冲区分为直接与非直接缓冲区,直接缓冲区是在操作系统内存中开辟的一片区域(详情见JVM内存管理的直接内存);二、非直接缓冲区是JVM分配的一块内存。

        非直接缓冲区:通过allocate()方法获取的缓冲区都是非直接缓冲区。这些缓冲区是建立在JVM堆内存之中的。

public static ByteBuffer allocate(int capacity) {
    if (capacity < 0)
    throw new IllegalArgumentException();
    // 在堆内存中开辟空间
    return new HeapByteBuffer(capacity, capacity);
}
HeapByteBuffer(int cap, int lim) { // package-private
    // new byte[cap] 创建数组,在堆内存中开辟空间
    super(-1, 0, lim, cap, new byte[cap], 0);
    /*
    hb = new byte[cap];
    offset = 0;
    */
}

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值