ByteBuffer flip描述
2024-08-31 18:46:16
# 关于flip
ByteBuffer 的filp函数, 将缓冲区的终止位置limit设置为当前位置, 缓冲区的游标position(当前位置)重设为0.
比如 我们有初始化一个ByteBuffer 后有
ByteBuffer buffer = ByteBuffer.allocate(1024);
这是 终止位置limit在1024, 而起始位置position在 0
如果我们添加一个数据,
buffer.putint(90);
这会使起始位置 position 移到4, 也就是说postion始终都在第一个可写字节的位置上. limit 则不会发生改变
而如果这时,我们调用
buffer.flip();
position转到0, limit转到 4 也就是原来的position 所在位置
这里的flip, 从另外一个角度上来说, 是在读数据时,操作的
然而, 如果我此时在写
buffer.putInt(90);
就会将原来的覆盖掉
如果我们在写, 这时就不行了, 就会重现问题了. 因为我们的limit是4, 我们写入数据不能超过这个limit,(当然还有capacity)
所以在写的时候,最好先清空buffer.clear();
如果真的不想清空, 也可以调用
buffer.limit(newlimit);
设置一个较大的limit, 再写入
当然不能超过capacity, 可以等于 capacity
比如 我们有初始化一个ByteBuffer 后有
ByteBuffer buffer = ByteBuffer.allocate(1024);
这是 终止位置limit在1024, 而起始位置position在 0
如果我们添加一个数据,
buffer.putint(90);
这会使起始位置 position 移到4, 也就是说postion始终都在第一个可写字节的位置上. limit 则不会发生改变
而如果这时,我们调用
buffer.flip();
position转到0, limit转到 4 也就是原来的position 所在位置
这里的flip, 从另外一个角度上来说, 是在读数据时,操作的
然而, 如果我此时在写
buffer.putInt(90);
就会将原来的覆盖掉
如果我们在写, 这时就不行了, 就会重现问题了. 因为我们的limit是4, 我们写入数据不能超过这个limit,(当然还有capacity)
所以在写的时候,最好先清空buffer.clear();
如果真的不想清空, 也可以调用
buffer.limit(newlimit);
设置一个较大的limit, 再写入
当然不能超过capacity, 可以等于 capacity
最新文章
- centos之开放80端口
- JavaScript Array
- 自然语言7_NLTK中文语料库sinica_treebank
- ng指令之 ng-repeat 篇
- 变态跳台阶-一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- 线程入门之join方法
- fork()和vfork()区别
- cocos2dx lua 学习笔记(二)
- Angular4.0.0发布总览文章
- Mysql MHA(GTID)配置(实操)
- 启动springjar
- Oracle性能优化-读懂执行计划
- Python建立时间事件引擎原理剖析
- selenium+chromedriver刷点击量
- asp.net core 通过ajax上传图片及wangEditor图片上传
- IP地址与无符号整数值相互转换
- Linux IPC BSD socket编程基础
- SQLServer SELECT @@IDENTITY 遇到的坑
- transfer function
- SpringBoot idea maven打包war及运行war包
热门文章
- 关于MFC中重载函数是否调用基类相对应函数的问题
- 【leetcode刷题笔记】Add Two Numbers
- 【跨域】Access-Control-Allow-Origin
- 2017-2018-1 20179215《Linux内核原理与分析》第二周作业
- C#中如何获取一个二维数组的两维长度,即行数和列数?以及多维数组各个维度的长度?
- org.springframework.web.client.HttpClientErrorException: 400 null
- druid数据源的加密解密工具
- Python:更改字典的key
- centos7 查看启动ntp服务命令
- Servlet的生命周期以及简单工作原理的讲解