ByteBuffer调试工具类

一个可以形象展示ByteBuffer内容的方法,便于调试

package com.example.netty;import java.nio.ByteBuffer;public class ByteBufferUtil {/*** 打印ByteBuffer的内容,以十六进制和ASCII字符的形式展示。** @param buffer 要展示的ByteBuffer*/public static void debugByteBuffer(ByteBuffer buffer) {// 重置buffer的位置,以便从头开始读取buffer.rewind();// 用于存储十六进制字符串StringBuilder hexDump = new StringBuilder();// 用于存储ASCII字符StringBuilder asciiDump = new StringBuilder();// 一次读取一个字节while (buffer.hasRemaining()) {int byteValue = buffer.get() & 0xFF; // 确保是正数// 添加到十六进制字符串hexDump.append(String.format("%02X ", byteValue));// 添加到ASCII字符串,如果是不可打印的字符,则显示为点char ch = (char) byteValue;asciiDump.append((ch >= 32 && ch <= 126) ? ch : '.');// 每行16个字节if (buffer.position() % 16 == 0) {hexDump.append("   ").append(asciiDump);hexDump.append(System.lineSeparator());asciiDump.setLength(0); // 清空ASCII字符串}}// 如果最后一行不足16个字节,也打印出来if (asciiDump.length() > 0) {// 补足空格,保持对齐while (hexDump.length() < 48) {hexDump.append("   ");}hexDump.append(asciiDump);}// 打印结果System.out.println(hexDump.toString());}public static void main(String[] args) {// 示例:创建一个ByteBuffer并填充一些数据ByteBuffer buffer = ByteBuffer.allocate(64);for (int i = 0; i < buffer.capacity(); i++) {buffer.put((byte) i);}// 展示ByteBuffer内容debugByteBuffer(buffer);}
}

可以展现出如下结果:
在这里插入图片描述

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

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

相关文章

实战|EDU挖掘记录-某学校sql注入挖掘记录

本文来源无问社区&#xff0c;更多实战内容&#xff0c;渗透思路尽在无问社区http://www.wwlib.cn/index.php/artread/artid/9755.html 某大学的办公系统&#xff0c;学号是我从官网下载的优秀人员名单找到的&#xff0c;初始密码为姓名首字母加身份证后六位&#xff0c;我是社…

ctfshow-web入门-php特性(web142-web146)

目录 1、web142 2、web143 3、web144 4、web145 5、web146 1、web142 要求 v1 是数字&#xff0c;之后将 v1乘以 0x36d&#xff08;即16进制的869&#xff09;五次&#xff0c;然后将结果转换为整数并赋值给变量 $d&#xff0c;使用 sleep 函数使程序休眠 $d 秒&#xff0c…

Linux进程控制——进程终止

文章目录 进程终止从main函数return返回exit退出_exit和exit的区别程序异常终止perror与errno 进程终止 我们之前在命令行界面要终止一个进程时直接ctrlc来干掉一个进程是比较暴力的做法 实际上我们通常会使用一些函数调用接口或者系统调用接口来控制进程的退出 就像我们完成…

Redis使用场景-热点数据缓存

什么是缓存&#xff1f; 为了把一些经常访问的数据放入缓存中已减少对数据库的访问&#xff0c;从而减少数据库的压力&#xff0c;提高程序的性能。【内存中存储】-效率快 缓存的原理 什么样的数据适合放入缓存中&#xff1f; 1.查询频率高且修改频率低 2.数据安全性低 哪些组件…

3.k8s:服务发布:service,ingress;配置管理:configMap,secret,热更新;持久化存储:volumes,nfs,pv,pvc

目录​​​​​​​ 一、服务发布 1.service &#xff08;1&#xff09;service和pod之间的关系 &#xff08;2&#xff09; service内部服务创建访问 &#xff08;3&#xff09;service访问外部服务 &#xff08;4&#xff09;基于域名访问外部 &#xff08;5&#xff…

Docker快速搭建WordPress博客系统网站

WordPress 是一款广泛使用的开源内容管理系统(CMS),用于创建和管理网站和博客。 主要功能: 易于使用的界面:WordPress 提供了一个直观的后台管理界面,使用户能够轻松创建、编辑和管理网站内容。 主题和模板:WordPress 提供了各种主题和模板,可根据网站需求进行选择和自…

Volatile vs Atomic

Volatile vs Atomic 1、Volatile 变量2、Atomic 变量 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; volatile和atomic这两个关键字经常会出现在我们的视线中。它们虽然看似相似&#xff0c;实则功能大不相同。 1、Volatile 变量 作用&…

uni-app框架+vue3 实现上拉加载和下拉刷新功能

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;我是码喽的自我修养&#xff01;之前给大家分享了【vue2uniapp实现上拉加载和下拉刷新功能】uni-app框架vue2 实现上拉加载和下拉刷新功能https://blog.csdn.net/2301_78542842/article/details/140626170?spm1001.2014.30…

Git 基础 GitHub【学习笔记】

一、Git 优势 大部分操作在本地完成&#xff0c;不需要联网完整性保证尽可能添加数据而不是删除或修改数据分支操作非常快捷流畅与 Linux 命令全面兼容 二、Git 程序安装 https://git-scm.com 三、Git 结构 #mermaid-svg-9Go6R1leWXWrDCqn {font-family:"trebuchet ms&quo…

全球耐辐射电机驱动器市场规模预测:未来六年年复合增长率CAGR为5.1%

据恒州诚思研究&#xff0c;2023年全球耐辐射电机驱动器市场规模大约为20亿元&#xff0c;预计未来六年年复合增长率CAGR为5.1%&#xff0c;到2030年市场规模将接近28亿元。这一增长反映了耐辐射电机驱动器在全球市场中的重要性及其在未来发展中的潜在机会。随着技术的进一步发…

探索 Electron:构建用户友好的登录页面流程

Electron是一个开源的桌面应用程序开发框架&#xff0c;它允许开发者使用Web技术&#xff08;如 HTML、CSS 和 JavaScript&#xff09;构建跨平台的桌面应用程序&#xff0c;它的出现极大地简化了桌面应用程序的开发流程&#xff0c;让更多的开发者能够利用已有的 Web 开发技能…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十九章 等待队列

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

远程项目调试-informer2020

informer2020 Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting(原文&#xff09;Informer 是一个基于Transformer的模型&#xff0c;是为了应对长依赖关系而开发的。本文的主要主题是序列预测。序列预测可以在任何具有不断变化的数据的地方…

【STM32物联网】基于STM32+ESP8266+手机APP设计的智能密码锁源码原理图APP文档

实物图 1.摘要 设计了一种基于单片机的智能密码锁系统,提供了一种安全度高、智能化 便捷的门锁解决方案。系统由多个关键模块组成,包括 STM32 主控芯片、 RC522 射频 卡模块、指纹采集模块、矩阵按键、LCD 显示屏、 WiFi 模块和继电器等。这些模块发挥 着重要的功…

回溯的undo choice

重写N皇后和分割回文串,发现会想不明白path.remove(path.size() - 1)是在if里面还是if外面&#xff0c;问了GPT感觉很清楚 题目 N皇后 class Solution {List<List<Integer>> res new ArrayList<>();List<Integer> path new ArrayList<>();pu…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十八章 Platform 设备驱动

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

微信小程序之调查问卷

一、设计思路 1、界面 调查问卷又称调查表&#xff0c;是以问题的形式系统地记载调查内容的一种形式。微信小程序制作的调查问卷&#xff0c;可以在短时间内快速收集反馈信息。具体效果如下所示&#xff1a; 2、思路 此调查问卷采用服务器客户端的方式进行设计&#xff0c;服…

【0300】Postgres内核之 INSERT INTO 原始解析树 转 Query 树 (2 - 1)

1. 前言 在【0298】Postgres内核之 INSERT INTO 原始解析树 转 Query 树 (2)一文中讲解过Postgres内核在通过RangeVar打开一个目标关系表时,在函数parserOpenTable()中,会注册parser错误位置报告回调函数。 同时也说明了这个注册过程的使用模式。 本文将继续讲解该使用模…

【Linux】-----工具篇(编译器gcc/g++,调试器gdb)

目录 一、gcc/g 简单认识 程序的翻译过程认识gcc 预处理(宏替换) 编译 汇编 链接 宏观认识 如何理解&#xff08;核心&#xff09; 什么是链接&#xff1f; 链接的分类 二、gdb 基本的认识 基本操作及指令 安装gdb 启动gdb ​编辑 显示源代码(list) 运行程序…

【云原生】Docker搭建知识库文档协作平台Confluence

目录 一、前言 二、企业级知识库文档工具部署形式 2.1 开源工具平台 2.1.1 开源工具优点 2.1.2 开源工具缺点 2.2 私有化部署 2.3 混合部署 三、如何选择合适的知识库平台工具 3.1 明确目标和需求 3.2 选择合适的知识库平台工具 四、Confluence介绍 4.2 confluence特…