java中基本类型与byte[]转换推荐使用bytebuffer,因其安全高效且自动处理大小端序(默认大端);手动转换需注意字节序、字节数匹配及byte无符号处理;字符串转换应使用charset而非直接转byte[]。
![java中如何实现基本类型与字节数组 byte[] 的相互转换](https://img.php.cn/upload/article/001/242/473/178951984866292.png?x-oss-process=image/resize,p_40)
Java中基本类型与byte[]的相互转换,核心是利用java.nio.ByteBuffer(推荐)或手动按字节拆解/拼装。关键在于理解大小端序(默认大端)、字节数量(如int占4字节),并避免直接类型强转(会报错)。
用 ByteBuffer 实现高效转换
ByteBuffer是标准、安全、可读性强的方式,自动处理字节序和边界检查。
-
基本类型 → byte[]:分配足够容量的缓冲区,调用对应
putXxx()方法,再调用array()
int value = 123456; byte[] bytes = ByteBuffer.allocate(4).putInt(value).array(); // [0, 0, 1, -96] double d = 3.14; byte[] dblBytes = ByteBuffer.allocate(8).putDouble(d).array();
-
byte[] → 基本类型:用
wrap()包装数组,再调用对应getXxx()方法
byte[] b = {0, 0, 1, -96};
int restored = ByteBuffer.wrap(b).getInt(); // 123456
byte[] db = new byte[8];
// ... 填充8字节
double restoredD = ByteBuffer.wrap(db).getDouble();
注意:ByteBuffer默认使用大端序(Big-Endian)。如需小端,调用order(ByteOrder.LITTLE_ENDIAN)。
手动转换(适用于学习或特殊场景)
适合理解原理,但易出错,不建议生产环境直接使用。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- int → byte[](大端):
int i = 0x12345678; byte[] b = new byte[4]; b[0] = (byte)(i >> 24); b[1] = (byte)(i >> 16); b[2] = (byte)(i >> 8); b[3] = (byte)i;
- byte[] → int(大端):
byte[] b = {0x12, 0x34, 0x56, 0x78};
int i = ((b[0] & 0xFF)
<p>注意:每个<code>byte</code>是带符号的,转为无符号值需与<code>0xFF</code>按位与,防止高位扩展出错。</p>
<h3>封装工具方法提升复用性</h3>
<p>可将常用转换逻辑封装为静态工具类,统一管理字节序和异常处理。</p>
<pre class="brush:php;toolbar:false;">public class ByteConvert {
private static final ByteOrder ORDER = ByteOrder.BIG_ENDIAN;
public static byte[] toBytes(int value) {
return ByteBuffer.allocate(4).order(ORDER).putInt(value).array();
}
public static int toInt(byte[] bytes) {
if (bytes.length
<h3>常见注意事项</h3>
-
byte[]长度必须匹配目标类型的字节数(short=2,int=4,long=8,float=4,double=8),否则ByteBuffer会抛BufferUnderflowException - 不要用
(byte[]) (Object) someInt这类非法强转——编译不通过 - 涉及网络或跨平台传输时,务必显式指定字节序(通常用大端)
- 字符串不是基本类型,其与
byte[]转换应使用String.getBytes(Charset)和new String(byte[], Charset)
不复杂但容易忽略细节。用好ByteBuffer,基本覆盖所有需求。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










