Netty跨平台通信的第一道坎:大小端字节序处理指南

Netty跨平台通信字节序处理指南

Netty跨平台通信的第一道坎:大小端字节序处理指南

1. 什么是字节序?

字节序(Endianness)是指多字节数据在内存或网络传输中的存储顺序,分为两种:

大端序(Big-Endian)

高位字节在前,低位字节在后(如人类阅读习惯)。

  • 示例:0x12345678 存储为 12 34 56 78。
  • 典型场景:网络协议(如TCP/IP)、Java默认字节序。

小端序(Little-Endian)

低位字节在前,高位字节在后(如x86 CPU架构)。

  • 示例:0x12345678 存储为 78 56 34 12。
  • 典型场景:Intel/AMD处理器、Windows系统。

2. Java中的字节序

  • Java通过ByteOrder类提供字节序支持,默认使用大端序(。
  • 网络协议(如TCP/IP)强制使用大端序,Java的DataInputStream/DataOutputStream默认按大端序处理数据

3. Netty的字节序支持

Netty通过ByteBufByteOrder类提供字节序控制,默认使用大端序(BIG_ENDIAN),与Java标准库和网络协议一致。

3.1. 设置字节序的三种方式

方式1:创建ByteBuf时指定

// 分配小端序的ByteBuf
ByteBuf buf = ByteBufAllocator.DEFAULT.buffer().order(ByteOrder.LITTLE_ENDIAN);

// 写入数据(按小端序)
buf.writeInt(0x12345678); // 存储为 78 56 34 12

// 读取数据(按小端序)
int value = buf.readInt(); // 正确解析为 0x12345678

方式2:通过ChannelConfig全局设置

ServerBootstrap bootstrap = new ServerBootstrap()
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值