当前位置: 首页 > news >正文

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));}}

运行结果:
在这里插入图片描述

http://www.lryc.cn/news/108824.html

相关文章:

  • C++(15):面向对象程序设计
  • 2023牛客暑期多校训练营6-A Tree
  • Vc - Qt - QPainter::SmoothPixmapTransform及QPainter::Antialiasing
  • 【练习】条件变量:创建三个线程 id号为ABC,三个线程循环打印自己的ID号,运行顺序为 ABCABC
  • SpringBoot项目修改中静态资源,只需刷新页面无需重启项目(附赠—热加载)
  • clear_data_code_2d_model
  • “深入剖析JVM:揭秘Java虚拟机的工作原理“
  • elementui表格table中实现内容的换行
  • java 框架
  • 死锁的发生原因和怎么避免
  • visual studio 生成dll文件以及修改输出dll文件名称操作
  • 【Leetcode】73.矩阵置零
  • zabbix监控mysql容器主从同步状态并告警钉钉/企业微信
  • ARM 常见汇编指令学习 9 - 缓存管理指令 DC 与 IC
  • 落地数字化管理,提升企业市场竞争力
  • 2023华数杯数学建模竞赛C题思路解析
  • Photon之如何解决Photon Server无法在局域网使用的bug
  • Redis两种持久化方案RDB持久化和AOF持久化
  • 银河麒麟v10 vnc环境配置
  • 【动态内存管理助力程序优化与性能飞升】
  • 电动汽车设计、制造、研发的学科、技术和前沿科技综述
  • NsPack3.x脱壳手记
  • 在.net 6.0中 调用远程服务器web服务,Webservices(xxx.asmx) ,RESTful 风格,2种解决方案。
  • 深度学习基础01-深度学习简介
  • Flink DataStream API详解
  • 【如何使用cv::erode()函数对图像进行腐蚀操作】
  • C++数据结构之BST(二叉搜索树)的实现
  • QT以管理员身份运行
  • java中的缓冲流
  • 【小吉带你学Git】idea操作(1)_配置环境并进行基本操作