缓冲区和通道

缓冲区

  • java.nio包提供了对缓冲区的支持,缓冲区是一种对象,表示存储在内存中的数据流。
  • 缓冲区常被用来提高那些读取输入和发送输出的程序的性能。它们让程序能够将大量的数据存储到内存中,这样使用和修改这些数据时速度将快很多。
  • 对于java的每种基本数据类型,都有相应的缓冲区:ByteBuffer,CharBuffer,DoubleBuffer,FloatBuffer,IntBuffer,LongBuffer,ShortBuffer。

继承关系

继承关系图
Buffer是顶层抽象类, ByteBuffer继承Buffer,也是抽象类.
byteBuffer最常见的两个具体实现类如下:DirectByteBuffer(JVM堆外部、通过unsafe.allocateMemory实现)、HeapByteBuffer(JVM堆)

常用函数

 int capacity() 
          返回此缓冲区的容量。 
Buffer flip() 
          反转此缓冲区。 首先将限制设置为当前位置,然后将位置设置为 0。如果已定义了标
          记,则丢弃该标记。 
 Buffer position(int newPosition) 
          设置此缓冲区的位置。 
 Buffer position(int newPosition) 
          设置此缓冲区的位置。 
int position() 
          返回此缓冲区的位置。 
 int limit() 
          返回此缓冲区的限制。 
 Buffer limit(int newLimit) 
          设置此缓冲区的限制。 
 boolean hasRemaining() 
          告知在当前位置和限制之间是否有元素。 
 int remaining() 
          返回当前位置与限制之间的元素数。 

缓冲区的常见操作

  • 存取:get()、put()等操作,这些都是会自动改变position的。
  • 翻转:也就是flip()操作。当要读取数据的时候,需要将position置0,并将limit指针指向内容的最后面,也就是position置0之前的位置。等价于这个操作:buffer.limit(buffer.position()).position(0);所以,这个操作执行两遍之后,它的position和limit是会变为0,所以这个是不能再进行读取或者写入操作的。
  • 压缩:可以释放一部分的缓冲区空间。例如可以将position之前的位置释放(position指针就是指向下次可以写的位置),调用compact,就会将position到limit之间的数据拷贝到缓冲区0位置开始,然后将移动元素的个数作为position的值(下次就可以从该位置接着写了)。
  • 清除:就是将position置0和limit=容量大小。

缓冲区的四个属性

  • 缓冲区的容量 :是它所包含的元素的数量。缓冲区的容量不能为负并且不能更改。
  • 缓冲区的限制:是第一个不应该读取或写入的元素的索引。缓冲区的限制不能为负,并且不能大于其容量。
  • 缓冲区的位置 是下一个要读取或写入的元素的索引。缓冲区的位置不能为负&
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值