java中设置bytebuffer字节序需调用order()方法传入byteorder枚举值,默认大端序;必须在put/get多字节数据前设置,否则读写结果错误;常用组合如allocate(n).order(byteorder.little_endian)。

Java 中设置 ByteBuffer 的字节序,核心就是调用 order() 方法并传入对应的 ByteOrder 枚举值。默认是大端序(BIG_ENDIAN),如需小端序必须显式设置。
用 order(ByteOrder) 明确指定字节序
ByteBuffer 实例创建后,直接调用 order() 即可切换字节序。这个设置只影响后续的 putXxx() 和 getXxx() 操作,不影响已写入的数据。
-
buffer.order(ByteOrder.BIG_ENDIAN):设为大端序(高位字节在前) -
buffer.order(ByteOrder.LITTLE_ENDIAN):设为小端序(低位字节在前) -
buffer.order(ByteOrder.nativeOrder()):设为当前 CPU 的原生字节序(x86/x64 是小端,ARM 可能是大端或可配置)
设置时机很重要:必须在 put/get 前完成
字节序必须在写入或读取多字节数据(如 putInt()、getShort())之前设置。如果先写入再改序,已存数据不会自动重排;如果读取前没设对,结果会错乱。
- 错误示范:
buffer.putInt(0x12345678); buffer.order(LITTLE_ENDIAN); int x = buffer.getInt();→ 读出的是错的 - 正确做法:
buffer.order(LITTLE_ENDIAN); buffer.putInt(0x12345678); buffer.flip(); int x = buffer.getInt();
常见创建+设置组合写法
通常把分配缓冲区和设置字节序连写,清晰且不易遗漏:
- 小端序 int 缓冲区:
ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN) - 大端序 short 缓冲区:
ByteBuffer.allocate(2).order(ByteOrder.BIG_ENDIAN) - 适配本机硬件:
ByteBuffer.allocate(8).order(ByteOrder.nativeOrder())
验证字节序是否生效
最直观的方式是写入一个已知值(如 0x01020304),再逐字节打印十六进制:
例如写入 0x01020304:
- 大端序输出应为:
01 02 03 04 - 小端序输出应为:
04 03 02 01
用 buffer.get(i) 或遍历 buffer.array() 并格式化为 %02x 即可观察。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











