博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Netty - ByteBuf索引管理
阅读量:6502 次
发布时间:2019-06-24

本文共 1248 字,大约阅读时间需要 4 分钟。

hot3.png

之前写过一篇文章介绍过JDK里面InputStream的mark(readlimit)和reset()方法,。相应的,可以通过调用markReaderIndex()/markWriterIndex()/resetReaderIndex()resetWriterIndex()来标记和重置ByteBuf的readerIndexwriterIndex

除此之外,还可以调用readerIndex(int)/writerIndex(int)来将索引移动到指定位置。如果尝试设置到一个无效的位置将会抛出IndexOutOfBoundsException

在调用clear()方法之前:

+-------------------+------------------+------------------+      | discardable bytes |  readable bytes  |  writable bytes  |      |                   |     (CONTENT)    |                  |      +-------------------+------------------+------------------+      |                   |                  |                  |      0      <=      readerIndex   <=   writerIndex    <=    capacity

After clear():readerIndex和writerIndex都被设置成了0,但是不会清除内存中的内容

+---------------------------------------------------------+      |             writable bytes (got more space)             |      +---------------------------------------------------------+      |                                                         |      0 = readerIndex = writerIndex            <=            capacity

AbstractByteBuf#clear 代码如下:可以看到,只是将两个索引重置为0,没有对内存进行擦除操作。

public ByteBuf clear() {    readerIndex = writerIndex = 0;    return this;}

转载于:https://my.oschina.net/javamaster/blog/2998525

你可能感兴趣的文章
overflow清除浮动的原理
查看>>
Spring Boot 使用parent方式引用时 获取值属性方式默认@
查看>>
解决maven下载jar慢的问题(如何更换Maven下载源)
查看>>
linux安装gitLab
查看>>
concurrent包的实现示意图
查看>>
golang os.Args
查看>>
Linux常用命令
查看>>
spring-data-elasticsearch 概述及入门(二)
查看>>
Solr启动和结束命令
查看>>
1.12 xshell密钥认证
查看>>
3.2 用户组管理
查看>>
ibatis 动态查询
查看>>
汇编语言之实验一
查看>>
git 调用 Beyond Compare
查看>>
SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)[转]
查看>>
android实现图片识别的几种方法
查看>>
mvc学习地址
查看>>
masonry 基本用法
查看>>
Word产品需求文档,已经过时了【转】
查看>>
dtoj#4299. 图(graph)
查看>>