Netty:ByteBuf写入数据、读出数据
介绍
Netty的ByteBuf数据位置索引是0开始的。
可以用ByteBuf的getByte(int index)方法从指定位置读出一字节,这个操作不会改变ByteBuf的readerIndex 或者 writerIndex 的位置。如果index小于0,或者index + 1大于ByteBuf的容量,就会抛出IndexOutOfBoundsException异常。
可以用ByteBuf的readByte()方法从当前readerIndex 读出一字节,并且将readerIndex 的值增加1。如果ByteBuf的readableBytes的值小于1,就会抛出IndexOutOfBoundsException异常。
可以使用ByteBuf的isReadable()方法判断是否有可读的数据。当(this.writerIndex - this.readerIndex) 的值大于0,isReadable()返回true。
writeShort(int value)函数:在ByteBuf的当前writerIndex位置开始写入一个16位的整数,并且将writerIndex增加2。因为输入参数是int型,占4个字节,高位的16位被丢弃。
getShort(int index)函数:从ByteBuf的绝对位置index开始,读取1个16位的整数。这个方法不改变ByteBuf的readerIndex 和 writerIndex。
代码举例
用getByte(int index)方法正常读取数据
代码:
package com.thb;import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;public class Test {public static void main(String[] args) { ByteBuf buf = Unpooled.buffer(1); for (int i = 0; i < 1; i++) {buf.writeByte(0x68);}for (int i = 0; i < buf.capacity(); i++) {System.out.println(buf.getByte(i));}}}
运行输出:

用getByte(int index)方法不正常读取数,据抛出异常
代码:
package com.thb;import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;public class Test {public static void main(String[] args) { ByteBuf buf = Unpooled.buffer(1); for (int i = 0; i < 1; i++) {buf.writeByte(0x68);}for (int i = 0; i < buf.capacity() + 1; i++) {System.out.println(buf.getByte(i));}}}
运行输出:

用readByte()方法正常读取数据–用readableBytes()判断可读的数据字节数
代码:
package com.thb;import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;public class Test {public static void main(String[] args) { ByteBuf buf = Unpooled.buffer(2); for (int i = 0; i < 2; i++) {buf.writeByte(0x68);} while (buf.readableBytes() > 0) {System.out.println(buf.readByte());}}}
运行输出:

用readByte()方法正常读取数据–用isReadable()判断是否有可读的数据
代码:
package com.thb;import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;public class Test {public static void main(String[] args) { ByteBuf buf = Unpooled.buffer(2); for (int i = 0; i < 2; i++) {buf.writeByte(0x68);} while (buf.isReadable()) {System.out.println(buf.readByte());}}}
运行输出:

用getBytes(int index, byte[] dst)读取部分内容到数组中
getBytes(int index, byte[] dst)表示从ByteBuf的绝对位置index开始,拷贝部分内容到目的字节数组中。这个操作不改变ByteBuf的readerIndex 和 writerIndex。
package com.thb;import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;public class Test {public static void main(String[] args) { ByteBuf buf = Unpooled.buffer(4);for (int i = 0; i < buf.capacity(); i++) {buf.writeByte(0x68);}byte[] data = new byte[2];// 从buf的第二个字节开始,拷贝2个字节的内容到data数组中buf.getBytes(1, data);System.out.println("数组data的内容:");for (int i = 0; i < data.length; i++) {System.out.println(data[i]);}System.out.println("buf的内容:");for (int i = 0; i < buf.capacity(); i++) {System.out.println(buf.getByte(i));}}}
运行结果:

用writeShort(int value)写入一个short型整数,用getShort(int index)读取一个short型整数
package com.thb;import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;public class Test {public static void main(String[] args) { ByteBuf buf = Unpooled.buffer(4);buf.writeShort(2048);// 从buf中读取一个short型整数并打印出来,看是否和传入的相同System.out.println("从ByteBuf中读取的short型整数为:" + buf.getShort(0));}}
运行结果:

相关文章:
Netty:ByteBuf写入数据、读出数据
介绍 Netty的ByteBuf数据位置索引是0开始的。 可以用ByteBuf的getByte(int index)方法从指定位置读出一字节,这个操作不会改变ByteBuf的readerIndex 或者 writerIndex 的位置。如果index小于0,或者index 1大于ByteBuf的容量,就会抛出IndexO…...
C++(15):面向对象程序设计
面向对象程序设计概述 面向对象程序设计(object-oriented programming)的核心思想是数据抽象、继承和动态绑定。 1.使用数据抽象,可以将类的接口与实现分离; 2.使用继承,可以定义相似的类型并对其相似关系建模&#x…...
2023牛客暑期多校训练营6-A Tree
2023牛客暑期多校训练营6-A Tree https://ac.nowcoder.com/acm/contest/57360/A 文章目录 2023牛客暑期多校训练营6-A Tree题意解题思路代码 题意 解题思路 最大价值和这个数据范围,一眼 d p dp dp。 直接在树上并不好处理,问题是如何有效转化、处理…...
Vc - Qt - QPainter::SmoothPixmapTransform及QPainter::Antialiasing
QPainter::SmoothPixmapTransform是一个标志,用于指定绘制操作中的平滑像素变换行为。当使用QPainter绘制一幅图像时,设置SmoothPixmapTransform标志可以使图像变换过程更加平滑,减少锯齿状边缘的出现。此标志通常用于绘制缩放后图像的情况。…...
【练习】条件变量:创建三个线程 id号为ABC,三个线程循环打印自己的ID号,运行顺序为 ABCABC
题目: 创建三个线程 id号为ABC,三个线程循环打印自己的ID号,运行顺序为 ABCABC......要求使用条件变量 #include <stdio.h> #include <pthread.h> #include <unistd.h>//创建互斥锁 pthread_mutex_t mutex PTHREAD_MUTE…...
SpringBoot项目修改中静态资源,只需刷新页面无需重启项目(附赠—热加载)
初衷 💢初衷💢 因为一遍遍修改并重启项目觉得很麻烦,所以刚开始就自己给项目配置了热加载,但奈何代码更新还是慢,还不如我重启一遍项目的速度,所以放弃了自己上网找到的热加载配置。直到我debugger前端代码…...
clear_data_code_2d_model
dev update off () dev close window () ImageFiles:-./二维条码/read_image(Image,ImageFiles 十二维条码原图.png)dev_open_window_fit_image(Image,0,0,-,-1,WindowHandle)set_display_font (WindowHan…...
“深入剖析JVM:揭秘Java虚拟机的工作原理“
标题:深入剖析JVM:揭秘Java虚拟机的工作原理 摘要:本文将深入探讨Java虚拟机(JVM)的工作原理,包括JVM的架构、内存管理、垃圾回收、即时编译等关键技术。通过对JVM的剖析,我们可以更好地理解Ja…...
elementui表格table中实现内容的换行
问题 elementui 中的 table 行内的内容不能进行换行。 解决方法 思路: 利用 作用域插槽 结合 v-html,通过作用域插槽传递内容到表格行内,再通过 v-html 进行内容的替换。 代码: <el-table:data"tableData"stri…...
java 框架
目录 Spring 如何解决 bean 的循环依赖?什么是 AOP?Spring 如何实现的?BeanFactory 和 ApplicationContext 有什么区别?介绍一下 Spring bean 的生命周期Spring 的隔离级别Spring 框架用到了哪些设计模式?并举出典型例子Spring 如何解决 bean 的循环依赖? Spring中引入三…...
死锁的发生原因和怎么避免
项目场景: 提示:这里简述项目相关背景: 例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大) 问题描述 死锁,简单来说就是两个或者两个以上的线程在…...
visual studio 生成dll文件以及修改输出dll文件名称操作
目录 visual studio 生成dll文件以及修改dll文件名称一、准备测试代码二、设置导出dll属性三、生成dll文件 .lib .dll .pdb 的简单介绍dll文件使用方式lib文件使用方式1、动态链接 (原理)2、静态链接: visual studio 生成dll文件以及修改dll文…...
【Leetcode】73.矩阵置零
一、题目 1、题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例1: 输入:matrix = [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例2: 输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1…...
zabbix监控mysql容器主从同步状态并告警钉钉/企业微信
前言:被监控的主机已经安装和配置mysql主从同步,和zabbix-agent插件。 mysql创建主从同步:http://t.csdn.cn/P4MYq centos安装zabbix-agent2:http://t.csdn.cn/fx74i mysql主从同步,主要监控这2个参数指标…...
ARM 常见汇编指令学习 9 - 缓存管理指令 DC 与 IC
文章目录 ARM64 DC 与 IC 指令 上篇文章:ARM 常见汇编指令学习 8 - dsb sy 指令及 dsb 参数介绍 ARM64 DC 与 IC 指令 AArch64指令集中有两条关于缓存维护(cache maintenance)的指令,分别是IC和DC。 IC 是用于指令缓存操作&…...
落地数字化管理,提升企业市场竞争力
数字化企业管理方案是一种利用数字技术和信息系统来提升企业管理效率和运营效果的策略。 潜在的数字化企业管理方案 1、企业资源规划(ERP)系统:建立一个集成的ERP系统来统一管理企业的各项业务流程,包括采购、销售、库存管理、财…...
2023华数杯数学建模竞赛C题思路解析
如下为:2023华数杯数学建模竞赛C题 母亲身心健康对婴儿成长的影响 的思路解析 C题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护,还为婴儿提供情感支持和安全感。母亲心理健康状态的不…...
Photon之如何解决Photon Server无法在局域网使用的bug
前言 先介绍一下Photon的两个服务器服务: Photon Cloud 是一个完全托管的软件即服务 (SaaS) 解决方案。我们可以完全专注于应用程序客户端,而托管、服务器操作和扩展均由光子官方负责。 Photon Server 是一个本地服务器应用程序,我们可以在本地或指定的计算机上运行和托管。…...
Redis两种持久化方案RDB持久化和AOF持久化
Redis持久化 Redis有两种持久化方案: RDB持久化AOF持久化 1.1.RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启…...
银河麒麟v10 vnc环境配置
方法一、启用自带远程桌面 银河麒麟默认已经自带远程桌面,如下图。此时即可用Realvnc Viewer访问该终端,仔细查看后自带的远程桌面是开源组件gnome-remote-desktopGNOME / gnome-remote-desktop GitLabhttps://gitlab.gnome.org/GNOME/gnome-remote-de…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
