首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java-彻底弄懂netty-程序员深入理解NIO怎么操作buffer-知识铺

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停的来唤醒你记忆深处的知识点。

一、Buffer使用场景

  主要和Channel通道打交道,无论是从通道里读数据到Buffer中,还是从Buffer中数据写入到通道中,都离不开Buffer。

二、Buffer本质

   Buffer缓冲区本质是一块连续的内存,NIO把这块缓冲区封装成对象,对外提供一组遍历的方法,来操作这块缓冲区。

三、Buffer基本方法

 3.1 开辟缓冲区方法

  3.1.1 ByteBuffer.allocate(1024)  :

     a.开辟一块1024字节的连续空间。

     b.创建的缓存区是在JVM堆上,也叫做堆字节缓存区。

     c.这种缓冲区有个过程,用户空间和内核空间上数据拷贝动作。

     d.由于是在堆上操作,创建效率高。适合频繁创建buffer场景。

     e.读写效率低,用户态和内核态有个数据拷贝过程。

  3.1.2 ByteBuffer.allocateDirect(1024);

     a.开辟一块1024字节,堆外内存区。

     b.直接在系统内存中创建一段连续的缓冲区。

     c.真正意义上的零拷贝。

     d.创建效率低,适合低频创建buffer场景。

     e.读写效率高,直接操作堆外内存,不需要拷贝。

3.2 从通道到buffer方法

xxChannel.read(buf);  从通道内读取数据,写入大buffer中。

3.3 切换buffer模式

buf.flip();  切换读取数据的模式

3.4 判断buffer是否被读取完毕

buf.hasRemaining() 循环判断buffer是否被读完

3.5 读buffer内容

buf.get()  从buffer中读取内容,同时内部标志位会移动。

四、buffer 原理

 三个属性:capacity、position、limit

4.1 capacity 缓冲区的容量,固定大小

4.2 position

      写模式: 下一个可写入位置

      读模式: 置为0号位置。

4.3 limit

      写模式: limit和capacity相等,

               表示最大可以写入多少。

      读模式: limit 表示最大可以读取多少。

五、buffer种类

每种基本类型对应的buffer

ByteBuffer

MappedByteBuffer  操作大文件,读写性能高。

CharBuffer

DoubleBuffer

FloatBuffer

IntBuffer

LongBuffer

ShortBuffer

  如果对您有用,请轻轻的轻轻的点下赞。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190810A0P5O300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券