ByteBuffer的讲解和使用

news2025/2/22 13:41:50

1.它其实就是一个数据读取或者写入的一个缓冲区

2.基本的操作步骤:

  •  向buffer写入数据,例如调用channel.read(buffer)
  • 调用flip()切换至读模式
  • 从buffer读取数据,例如调用buffer.get()
  • 调用clear()或者compact()切换至写模式
  • 重复以上步骤

3.内部结构

 

 

写模式下:每写一次,position就会往右移动一次

读模式下:limit会立马指向最后一个数据的下标位置,每读一次,position向后移动一位

4.ByteBuffer有两种不同的类型:

ByteBuffer.allocate(1).getClass()//这种方式获取的buffer是基于堆内存的,因为会受到gc垃圾回收的影响,重新移动位置后,会出现一个拷贝的步骤,这样也就会出现一个性能损耗,读写效率低一些
ByteBuffer.allocateDirect(1).getClass()//这种方式是直接基于系统内存的,读写效率较高,但是因为基于系统内存,分配时,需要调用一些系统方法去分配,所以分配效率较低,这样一来的话,也就很容易出现一个内存泄露的问题,使用后必须及时释放掉

4.常用方法:

  • 向buffer中写入数据,使用channel的read方法或者buffer自己的put方法
  • 从buffer中读取数据,使用channel的write方法或者是buffer自己的get方法
  • 如果读取后希望重新读,可以使用rewind,可以将position移动到下标0的位置,或者是get(i),这样读取的话,就不会出现position往后移动的过程了
  • 如果希望做一个标记,然后过一会需要的时候再回到标记处继续读,可以使用mark做一个标记,然后继续往下读,哪怕position位置发生了变化,只要再调用一个reset方法,就可以让position的位置回到下标0处

5.字符串类型和buffer的相互转换

(一)字符串转buffer:

        //1.使用buffer的put方法
        ByteBuffer s=ByteBuffer.allocate(11);
        s.put("hello".getBytes());

        //2.使用charset,可以把字符串转换为buffer并且,把buffer的模式变为读模式
        ByteBuffer hello = StandardCharsets.UTF_8.encode("hello");

        //3.wrap,可以把字符串转换为buffer并且,把buffer的模式变为读模式
        ByteBuffer buffer=ByteBuffer.wrap("hell".getBytes());

(二)buffer转buffer

        String s1 = StandardCharsets.UTF_8.decode(buffer).toString();
        
//注意,这里转换的buffer必须已经设置为了读取模式,否则什么也读不到

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/502144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业商务租车为工作提供便利

在当代的忙碌生活中,我们总会遇到各种各样的烦恼。最突出的是企业在商务工作中,常常会因为各种原因而导致耽误时间,如火急火燎的去谈生意,却遇到了堵车的现象,或者车辆出现问题而导致耽误时间,而广州商务租…

ICV:中国车载超声波雷达市场规模预计2024年可达20亿美元

近年来,由于市场对车辆先进安全功能的需求的增加,汽车超声波传感器市场一直保持稳步增长。ICV估计,车载超声波传感器全球市场预计在2022年至2027年之间以11.5%的复合年增长率增长,这种增长是由越来越多的高级驾驶辅助系…

python 开发 1 之 拷贝文件

目录 一、需求: 二、python拷贝分析 1、需要的库,及源路径、目标路径定义 2、定义的拷贝数组 3、自定义拷贝函数 1) 如果目标路径不存在时,先创建目标路径 2)遍历元组数组中的文件 3)如果源文件或目…

【JavaEE初阶】多线程进阶(六)JUC 线程安全的集合类

文章目录 JUC(java.util.concurrent)的常见类Callable接口相关面试题 ReentrantLock(可重入锁)原子类信号量SemaphoreCountDownLatch 线程安全的集合类多线程环境使用 ArrayList多线程使用队列多线程使用哈希表(重点)相关面试题 J…

2.sql server数据表的管理(实验报告)

目录 一﹑实验目的 二﹑实验平台 三﹑实验内容和步骤 四﹑命令(代码)清单 五﹑运行结果 一﹑实验目的 掌握使用SQL Server管理平台和Transact-SQL语句Create table和Alter table创建和修改表的方法;掌握在SQL Server管理平台中对表进行插入、修改和删除数据操作…

哪种蓝牙耳机戴着最舒服?久戴不痛的蓝牙耳机推荐

很多喜欢跑步或通勤的时候带着耳机听音乐,而现在无线耳机市场规模扩大之后,也开始走向更加细分的市场,以满足越来越不同的差异化需求,但是佩戴的舒适度是很多人关注的,下面整理了几款佩戴舒适度高的蓝牙耳机&#xff0…

国考省考结构化面试:组织管理题,调研题,宣传题,活动题,整治题

国考省考结构化面试:组织管理题,调研题,宣传题,活动题,整治题 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测…

基于python语言dlib库和opencv库的视频眨眼检测

功能说明: 基于python编程语言,使用dlib 和opencv开发的视频眨眼检测。 环境: * python 3.6.8 * opencv 3.4.2.16 * dlib 19.7.0 原理: 1.使用opencv-python读取处理视频图像 2.使用线程机制处理人脸检测关键点 3.根…

Midjourney 5.1震撼更新!逼真到给跪,中国情侣细节惊艳,3D视频大片马上来

来源 | 新智元 作者 | 桃子,拉燕 一个月前,Midjourney V5画的一对中国完美情侣在网上爆火,让许多人纷纷惊呼画师要失业了。 恰在今天,Midjourney官宣V5能免费用了,而且还是最新版本V5.1。 各个大模型的研究测试传送门 …

Android 13 变更及适配攻略

准备工作 首先将我们项目中的 targetSdkVersion和compileSdkVersion 升至 33。 影响Android 13上所有应用 1.通知受限 对新安装的应用的影响: 如果用户在搭载 Android 13 或更高版本的设备上安装您的应用,应用的通知默认处于关闭状态。在您请求新的…

ChatGPT如何生成可视化图表-示例中国近几年出生人口

本教程收集于:AIGC从入门到精通教程汇总 ChatGPT本身不能直接生成可视化图表,但可以配合其他可视化工具或库 方法一:前端可视化开发库 Echarts(地址:Apache ECharts ) 方法二:现有Python库。…

dump_stack分析函数调用关系实例及其实现

dump_stack分析函数调用关系 文章目录 dump_stack分析函数调用关系一、dump_stack实例二、dump_stack实现分析Step 1: dump_stack_print_infoStep 2: show_stack 三、关于堆栈 一、dump_stack实例 在正点原子阿尔法开发板中查看insmod命令使用什么方法: #include …

[蓝帽杯 2022 初赛]之Misc篇(NSSCTF)刷题记录(复现)⑨

NSSCTF-Misc篇-[蓝帽杯 2022 初赛] 计算机取证:[蓝帽杯 2022 初赛]计算机取证_1[蓝帽杯 2022 初赛]计算机取证_2[蓝帽杯 2022 初赛]计算机取证_3[蓝帽杯 2022 初赛]计算机取证_4 手机取证:[蓝帽杯 2022 初赛]手机取证_1[蓝帽杯 2022 初赛]手机取证_2 网站…

使用堆视图创建3个按钮三角摆放

使用堆视图创建3个按钮三角摆放 效果如图: 分析 从效果图看,想要让3个Button呈三角摆放,需要两个堆视图完成。 首先外部一个大的“垂直堆”,垂直堆第一项放一个Button,第二项放一个“水平堆” 水平堆里再放两个But…

刚入职领导就要求做自动化测试?我懵了,从业务到框架设计总结...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

深度学习的环境搭建(window+pytorch)

1.检查是否安装CUDA CUDA(Compute Unified Device Architecture)是由 NVIDIA 推出的一种并行计算平台和编程模型,用于利用 NVIDIA GPU(Graphics Processing Unit)的强大计算能力进行高性能计算任务。CUDA 的主要特点是…

logstash介绍和使用-ELK文章2

官方 Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。 下载和文档:https://www.elastic.co/cn/logstash/ docker部署:https://hub.docker.…

教你快速把heic格式转化jpg,4种方法操作简单

教你快速把heic格式转化jpg的方法,因为HEIC格式图片通常出现在苹果公司的iOS 11操作系统及之后的版本中,这是因为苹果公司在这些版本中采用了HEIF(高效图像格式)作为默认的照片格式来替代JPEG格式。同时,需要注意的是&…

asp.net+sqlserver社区小区流动人口管理系统

该系统的基本功能包括用户登录,管理员信息管理,社区组织管理,常住人口管理,流动人口管理,社区事务管理,社区服务管理,系统用户管理,修改密码等功能。 (3)功能…

项目分析v2

用户: 登录: 不能重复登录。 在服务端使用一个hashset记录用户的登录状态,如果用户id不在集合里面,就可以登录,登录时将用户id添加到集合中。用户下线时,将set中的元素删除。 登录成功后,服务端…