JAVA NIO学习笔记一

NIO学习笔记一

七种缓冲区Buffer

  • ByteBuffer - 最常用的一种
  • CharBuffer
  • IntBuffer
  • LongBuffer
  • FloatBuffer
  • DoubleBuffer

缓冲区管理方式

几乎一致,通过allocate() 获取缓冲区

缓冲区存取数据的核心方法

  • put() 存入数据到缓存区中
  • get() 获取缓冲区中的数据

缓冲区的四个核心属性

  • capacity 容量,声明后不可改变
  • limit 界限,表示缓冲区中可以操作数据的大小
  • position 位置,表示缓冲区中正在操作的数据的位置
  • mark 标记,记录当前position的位置,可以通过reset()恢复到mark的位置
  • 0 <= mark <= position <= limit <= capacity

缓冲区读写模式

对于同一个缓冲区,在不同模式下,capacity不变,limit与position将会发生改变。

  • 写模式

    put()

    clear() 清空缓冲区,(缓冲区数据仍然存在,但是出于被“遗忘”状态,就是因为position以及limit变了)

  • 读模式

    flip() 切换到读取数据的模式

    get()

    rewind() 重读,position变为0

    remain() 获取缓冲区中还有多少未读的数据

在这里插入图片描述

直接缓冲区与非直接缓冲区

  • 非直接缓冲区

    通过allocate()分配缓冲区,建立在jvm内存中

  • 直接缓冲区

    通过allocateDirect() 分配直接缓冲区,建立在物理内存中,可以提高效率

传输图解

  • 传统传输

在这里插入图片描述

  • 读与写都要经过三次复制。
  • NIO传输

在这里插入图片描述

  • 通过物理内存映射文件,减少了中间的copy过程。
  • 弊端:
    • 直接建立在物理内存中,分配、销毁消耗大
    • 应用程序写入物理内存中后,何时写入物理磁盘就不归程序管理。
  • isDirect()方法判断是否直接缓冲区(抽象方法,由具体的实现类返回)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值