Buffer的定义:

概念上,缓冲区是包在一个对象内的基本数据元素数组。Buffer类相比一个简单数组的优点是它将关于数据的数据内容和信息包含在一个单一的对象中。Buffer类以及它专有的子类定义了一个用于处理数据缓冲区的API。

Buffer类的有以下的几个最关键的属性

容量(Capacity) 缓冲区能够容纳的数据元素的最大数量。这一容量在缓冲区创建时被设定,并且永远不能被改变。

上界(Limit) 缓冲区的第一个不能被读或写的元素。或者说,缓冲区中现存元素的计数。

位置(Position) 下一个要被读或写的元素的索引。位置会自动由相应的get( )和put( )函数更新。

标记(Mark) 一个备忘位置。调用mark( )来设定mark = postion。调用reset( )设定position = mark。标记在设定前是未定义的(undefined)。

这四个属性之间总是遵循以下关系: mark <= position <= limit <= capacity

以下是Buffer类的源代码:

新创建的缓冲区: 此时,mark和position都为0 ,limit和capacity都为缓冲区的长度,我们可以往缓冲区里边写入数据

将缓冲区内写入一些数据:此时,只有position的位置变了,它指向我们下一个可写的元素位置

既然我们已经在buffer中存放了一些数据,如果我们想在不丢失位置的情况下进行一些更改该怎么办呢?put()的绝对方案可以达到这样的目的。假设我们想将缓冲区中的内容从“Hello”的ASCII码更改为“Mellow”。我们可以这样实现:

buffer.put(0,(byte)'M').put((byte)'w');

这里通过进行一次绝对方案的put将0位置的字节代替为十六进制数值0x4d,将0x77放入当前位置(当前位置不会受到绝对put()的影响)的字节,并将位置属性加一。结果下所示:

将缓冲区翻转:

缓冲区的读取和写入都是从postion开始的,直到limit结束.当我们把缓冲区写了一些数据之后,想读取这些数据,我们可以调整limit和position的位置,让limit指向原先的position,让position指向0 ,这样就可以读到原先写书的数据了,JDK为我们提供了一个简单的方法:

    buffer.flip();

翻转之后的缓冲区:

flip()方法的内部也是通过改写limit和position的位置来实现的:

最新文章

  1. runtime理论知识
  2. 《SSM框架搭建》一.构建maven web项目
  3. java之String
  4. oracle11g 连接问题
  5. How to use python remove the &#39;^M&#39; when copy words from Windows to Linux
  6. Android之桌面组件AppWidget
  7. Oracle表空间操作
  8. Warning: World-writable config file &#39;/etc/my.cnf&#39; is ignored
  9. 轻量级的内部测试过程r \\ u0026研发团队
  10. Oralce Plsql 中文显示乱码问题无需修改注册表完美解决
  11. mysql中 date datetime time timestamp 的区别
  12. 023_nginx跨域问题
  13. 【MongoDB】MongoDb的“not master and slaveok=false”错误及解决方法 mongo连接从库出现问题
  14. maven 常用 Archetypes
  15. css设置div高度与宽度相等的一种方法
  16. PowerDesigner软件的使用
  17. Spring cloud config-client 爬坑
  18. MAC软件工具下载
  19. 廖雪峰git笔记
  20. javascript总结19:javascript 使用概述

热门文章

  1. log4j配置输出到多个日志文件
  2. [leetcode]Minimum Window Substring @ Python
  3. iOS开发-模板方法模式
  4. Android官方导航栏ActionBar(二)—— Action View、Action Provider、Navigation Tabs的详细用法
  5. Andorid之官方导航栏Toobar
  6. sql server management studio 查询的临时文件路径
  7. MySql之插入操作
  8. linux使用pam_tally2.so模块限制登录3次失败后禁止5分钟
  9. JSOUP爬虫示例
  10. git 命令常用总结