第三章 缓冲区(3)
来源:互联网 发布:linux 打印日志 编辑:程序博客网 时间:2024/04/30 11:38
2.1.5 翻转我们已经学会了填充buffer,现在我们准备学习从buffer中移出数据。我们想把这个buffer传递给通道channel,把内容被写到目的地去。但是如果channel调用get()方法,那么它将得到一个没有定义的数据,而不是我们刚才插入的数据。如果我们将position值设为0,那么channel就可以从正确的位置读取数据了,但是它是怎样知道我们插入数据的结尾呢?这就是limit属性被引入的目的。Limit属性确定了buffer中数据的结尾。我们需要将limit先设置为当前的position,然后再将position属性设置为0。我们手工的向下面那样做:buffer.limit(buffer.position()).position(0);设计这些API的人也希望有这样的翻转方法。因此他们设计了一个便利的方法来达到这样的目的:Buffer.flip();Flip方法将buffer从填充数据的状态改变为一种翻转为写出数据的状态。通过翻转图2.4的buffer就变成了图2.5中的样子。图2.5被翻转后的bufferRewind方法跟flip方法类似,但是rewind方法不影响limit属性。它只是将position值设置为0。你可以用rewind方法返回重新将数据读入到已经翻转的buffer中。如果你翻转buffer两次会出现什么结果?Buffer就变成了零大小。对图2.5进行跟图2.4一样的翻转操作:把limit设置为position,将position设置为0。Position和limit都变成0。尝试使用put和get方法对buffer进行操作,会分别导致BufferUnderflowException和BufferOverflowException异常。
- 第三章 缓冲区(3)
- 第三章 数据缓冲区高速缓冲
- 第三章 LTE MAC协议解读 --- 缓冲区状态报告(BSR)
- 第二章 缓冲区(1)
- 第二章 缓冲区(2)
- 第二章 缓冲区(4)
- 第二章 缓冲区(5)
- 第二章 缓冲区(6)
- 第二章 缓冲区(7)
- 第二章 缓冲区(8)
- 第二章 缓冲区(9)
- 第二章 缓冲区(10)
- 第二章 缓冲区(11)
- 第二章 缓冲区(12)
- 第二章 缓冲区(13)
- 常用的SQL*PLUS命令 ,SQL缓冲区操作和最基本的脚本操作(从实践中学习Oracle SQL-第三章)
- Vulkan编程指南翻译 第三章 队列和命令 第2节 创建命令缓冲区
- 第3章 数据缓冲区高速缓冲
- 网络游戏成互联网竞争焦点 市场集中度下降
- Linux 线程实现机制分析
- 嵌入式小问题的解决
- 规划多个域的访问控制策略(三)
- Java环境变量配置地我变娘~~~
- 第三章 缓冲区(3)
- 什么是MVC(三层架构)
- 如何将SQLite数据库(dictionary.db文件)与apk文件一起发布
- SNS简介
- C++虚函数表解析(转)
- Session丢失的解决办法小结
- 1.8 简单的文件输入输出
- Android 自定义View
- 什么是CMM/CMMI认证