Buffer 的常用方法:
方 法 描 述

Buffer clear() :清空缓冲区并返回对缓冲区的引用

Buffer flip() :将缓冲区的界限设置为当前位置,并将当前位置充值为 0

int capacity(): 返回 Buffer 的 capacity 大小

boolean hasRemaining(): 判断缓冲区中是否还有元素

int limit() :返回 Buffer 的界限(limit) 的位置

Buffer mark(): 对缓冲区设置标记

int position():返回缓冲区的当前位置 position

Buffer position(int n) :将设置缓冲区的当前位置为 n , 并返回修改后的 Buffer 对象

int remaining() :返回 position 和 limit 之间的元素个数

Buffer reset() :将位置 position 转到以前设置的 mark 所在的位置

Buffer rewind() :可以在读或者写的模式写将position的值重新设置为0,limit和capacity不变, 取消设置的 mark

6.向ButyBuffer中存入数据:put():存入数据
示例代码:
/**

  • 2.@desc 向缓冲区中存入数据
    */
    public static void putData(){
    ByteBuffer byteBuffer=ByteBuffer.allocate(1024);//开辟一个大小为1kb的且是存储byte类型数据的缓存区
    String str=“IWill”;
    byte[] bytes = str.getBytes();//将字符串转换为字符数组
    byteBuffer.put(bytes);//将数据存入到缓冲区中
    System.out.println(“容量:”+byteBuffer.capacity());
    System.out.println(“限制:”+byteBuffer.limit());
    System.out.println(“位置:”+byteBuffer.position());
    }

7.从ByteBuffer中取出数据:get():取出数据,flip():切换成读模式
示例代码:
/**

  • 3.@desc重缓存区读取数据:可参阅buffer的基本属性图
    */
    public static void getData()
    {
    ByteBuffer byteBuffer=ByteBuffer.allocate(10);//开辟一个大小为1kb的且是存储byte类型数据的缓存区
    String str=“IWill”;
    byte[] bytes = str.getBytes();//将字符串转换为字符数组
    byteBuffer.put(bytes);//将数据存入到缓冲区中
    System.out.println(byteBuffer);//1.没有切换模式的时候:pos=5 lim=10 cap=10

    byteBuffer.flip();//切换成读的模式
    System.out.println(byteBuffer);//2.切换模式之后的时候:pos=0 lim=5 cap=10

    //3.开始读取数据
    byte []bst=new byte[byteBuffer.limit()];
    byteBuffer.get(bst);//以这么大长度的数据开始读入
    System.out.println(byteBuffer);//pos=5 lim=5 cap=10:pos=5是因为下一个要读取的数据的索引

    for(int i =0;i<byteBuffer.position();i++)//从开始的位置到下一个要读取的数据的索引之间的数据即可我们最终需要读取的数据
    {
    System.out.print((char)byteBuffer.get(i)+"\t");//分别取出每一个字符然后输出在控制台上
    }
    }

8.rewind():可以在读或者写的模式写将position的值重新设置为0,limit和capacity不变
示例代码:
/**

  • 4.@desc:rewind():可以在读或者写的模式写将position的值重新设置为0,limit和capacity不变
    */
    public static void getInfoByRewmind(){

    ByteBuffer byteBuffer=ByteBuffer.allocate(10);//开辟一个大小为1kb的且是存储byte类型数据的缓存区
    String str=“IWill”;
    byte[] bytes = str.getBytes();//将字符串转换为字符数组
    byteBuffer.put(bytes);//将数据存入到缓冲区中
    System.out.println(byteBuffer);//1.没有切换模式的时候:pos=5 lim=10 cap=10

    byteBuffer.flip();//切换成读的模式
    System.out.println(byteBuffer);//2.切换模式之后的时候:pos=0 lim=5 cap=10

    byte []bst=new byte[byteBuffer.limit()];
    byteBuffer.get(bst);//开始读取数据
    System.out.println(byteBuffer);

    byteBuffer.rewind();//可以在读或者写的模式写将position的值重新设置为0,limit和capacity不变
    System.out.println(byteBuffer);

    String str02=“hhd”;//并不影响下一次的存储
    byteBuffer.put(str02.getBytes());
    System.out.println(byteBuffer);
    }

9.clear():重置缓冲区,但是不清空里面的数据,里面的数据此时处于被遗忘状态
示例代码:
/**

  • 5.@desc:clear():重置缓冲区,但是不清空里面的数据,里面的数据此时处于被遗忘状态
    */
    public static void getInfoByClear()
    {
    //1.存入数据
    ByteBuffer byteBuffer=ByteBuffer.allocate(10);
    String str=“IWill”;
    byteBuffer.put(str.getBytes());
    System.out.println(byteBuffer);

    //2.读取缓冲区
    byteBuffer.flip();
    byte []bts=new byte[byteBuffer.limit()];
    byteBuffer.get(bts);
    System.out.println(byteBuffer);

    //3.重置缓冲区
    byteBuffer.clear();
    System.out.println(byteBuffer);

    //4.将缓冲区中的数据打印在控制台上
    System.out.println((char)byteBuffer.get(1));

}

10.mark():标记position的位置;reset():恢复到标记的position的位置
示例代码:
/**

  • 6.@desc :mark():标记position的位置;reset():恢复到标记的position的位置
    */
    public static void getInfoByMark()
    {
    ByteBuffer byteBuffer=ByteBuffer.allocate(10);
    System.out.println(“最开始的缓冲区:”+byteBuffer);
    //1.存入数据
    String str=“IWill”;
    byteBuffer.put(str.getBytes());
    System.out.println(“存入数据的缓冲区:”+byteBuffer);

    //2.切换成读的模式
    byteBuffer.flip();
    //2.1从缓存区中读取3个数据
    byte []bst=new byte[byteBuffer.limit()];
    System.out.println(“缓存区中的3个数据:”+byteBuffer.get(bst, 0, 3));

    //3.标记positon的位置
    byteBuffer.mark();//因为上一句的执行结果为:pos=3 lim=5 cap=10,所以此时mark()的作用是将pos=3的位置作为下次操作的起始的位置,于是执行完下一句的结果为:pos=5 lim=5 cap=10
    System.out.println(“标记后的缓存区:”+byteBuffer.get(bst, 2, 2));

    //4.恢复到标记的位置
    byteBuffer.reset();//恢复后的结果会与标记之前的结果一样:pos=3 lim=5 cap=10
    System.out.println(“恢复标记后的缓存区:”+byteBuffer);

    //5.缓存区中还有能被操作的数据
    if (byteBuffer.hasRemaining())
    {
    System.out.println(“还有:”+byteBuffer.remaining()+“个”);
    //将他们取出来打印在控制台上
    for (int i = byteBuffer.position(); i <byteBuffer.limit(); i++)
    {
    System.out.println((char)byteBuffer.get(i));
    }
    }

}

Buffer对象中常用的几个方法相关推荐

  1. getHibernateTemplate()(Spring中常用的hql查询方法)

    Spring中常用的hql查询方法(getHibernateTemplate()) --------------------------------- 一.find(String queryStrin ...

  2. 数组中常用的高阶方法

    一.操作方法 1.concat 如果传递的参数是一个数组或者多个数组,那么会将多个数组的每一个项都添加到原来的数组后面,然后返回这个数组,原数组不变. 例如: 2.slice slice方法接受两个参 ...

  3. 08-数组中常用的属性及方法

    08-数组中常用的属性及方法 创建: 使用 JavaScript 关键词 new 使用数组文本创建 //数组中的方法: toString() 把数组转换为数组值(逗号分隔)的字符串. join() 方 ...

  4. java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing

    java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.sql.*; java.text.*; java.a ...

  5. Python中常用的内置方法

    Python中常用的内置方法: 比较大小.求和 如下所示: 代码块: #枚举:返回索引值和对应的value值for i,v in enumerate('westos'):print(i,v)#zips ...

  6. ML:模型训练/模型评估中常用的两种方法代码实现(留一法一次性切分训练和K折交叉验证训练)

    ML:模型训练/模型评估中常用的两种方法代码实现(留一法一次性切分训练和K折交叉验证训练) 目录 模型训练评估中常用的两种方法代码实现 T1.留一法一次性切分训练 T2.K折交叉验证训 模型训练评估中 ...

  7. php中的数组有哪几种方法,PHP中常用的遍历数组方法有几种,分别是什么?( )...

    PHP中常用的遍历数组方法有几种,分别是什么?( ) 更多相关问题 序列对心电触发的原理叙述,正确的是()A.是利用心电图的R波触发采集MR信号B.是利用心电图的T波触 静脉输血法的评价 有关急性梗阻 ...

  8. String对象中常用的方法

    1.charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码. strObj.charCodeAt(index) 说明: index将被处理字符的从零开始计数的编号.有效值为0到字符 ...

  9. J2EE项目开发中常用到的公共方法

    在项目IDCM中涉及到多种工单,包括有:服务器|网络设备上下架工单.服务器|网络设备重启工单.服务器光纤网线更换工单.网络设备撤线布线工单.服务器|网络设备替换工单.服务器|网络设备RMA工单.通用原 ...

最新文章

  1. 如何在Java中解析命令行参数?
  2. 左神算法:复制含有随机指针节点的链表 / 复杂链表的复制(Java版本)
  3. linux中用户与组的概念,Linux用户和组的概念
  4. flat在java中的含义_Java 9中Collectors.flatMapping()方法的重要性?
  5. 微信小程序秀才成语接龙趣味答题小游戏带流量主无授权源码
  6. VCL组件之公用对话框组件
  7. 移动硬盘新建选项消失、不能新建文件夹和文件的解决方案
  8. centos6.5安装mysql
  9. Centos8 安装 mariadb 最新版 10.5.x
  10. html阅读器 怎么卸载,internetexplorer怎么卸载
  11. Thinkpad预装win10硬盘分区
  12. UE4之添加开场动画
  13. 可以装虚拟机的云服务器,云服务器可以装虚拟机吗
  14. PCB贴片元件封装焊盘设计尺寸标准
  15. uniapp 判断手机网络状态
  16. 解决:flex布局之 flex-wrap:wrap 自动换行属性,导致上下两行div中间有空行
  17. 操作系统对定时器的应用
  18. ODBC 连接 ORACLE数据库 代码
  19. 微信小程序后端java服务商分账实现
  20. 主题:你为什么还没有好工作?

热门文章

  1. PIL.Image.DecompressionBombError: Image size (211025920 pixels) exceeds limit of 178956970 pixels, c
  2. 小米手机MIUI系统局域网同网络传输问题的方法步骤
  3. linux下压缩文件解压文件,linux下 解压和压缩文件 rar文件解压
  4. 轻量开源相册 Album
  5. 应届生在参加面试技巧
  6. 查看PMI ID和PDU方法
  7. B+树对比B树的好处
  8. java语言与其他语言的区别是_Java语言特点有哪些?Java区别其他语言特点详解
  9. 小程序中align-items: center竖直方向居中失败解决办法
  10. unbuntu22.04安装QQ音乐并解决无法打开问题