在 Java 中将 Long 转换为字节数组并返回
在 Java 中,将 long 基本数据类型转换为字节数组 (byte[] ),反之亦然是各种操作的常见任务,例如通过 TCP 连接发送数据。下面是实现此转换的全面解决方案:
Long 到 Byte Array
public byte[] longToBytes(long x) {
ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
buffer.putLong(x);
return buffer.array();
}
此方法使用 ByteBuffer 类创建大小为 Long.BYTES 的缓冲区,这是表示 long 值所需的字节数。 putLong()方法用于将long值写入缓冲区,array()方法返回表示long的底层字节数组。
Byte Array to Long
public long bytesToLong(byte[] bytes) {
ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
buffer.put(bytes);
buffer.flip(); // Flip the buffer to prepare for reading
return buffer.getLong();
}
要将字节数组转换回 long,将创建一个新的 ByteBuffer 并加载给定的字节数组。 Flip() 方法用于使缓冲区准备好读取。最后,getLong()方法从缓冲区中读取long值。
封装在Helper类中
为了方便,可以将转换方法封装在一个实用程序中类:
public class ByteUtils {
private static ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
public static byte[] longToBytes(long x) {
buffer.putLong(0, x);
return buffer.array();
}
public static long bytesToLong(byte[] bytes) {
buffer.put(bytes, 0, bytes.length);
buffer.flip(); // Flip the buffer to prepare for reading
return buffer.getLong();
}
}
此实用程序类提供了一种执行转换的简单方法,而无需每次都创建和管理 ByteBuffer 实例。
Endianness 注意事项
注意ByteBuffer 类使用系统的本机字节序。如果需要跨平台兼容性,则可能需要额外考虑处理字节序。
替代解决方案:使用库
虽然上面提供的本机 Java 解决方案已经足够,在某些情况下它们可能会变得乏味。对于复杂或扩展的数据转换需求,请考虑使用 Guava 或 Apache Commons 等库,它们提供更全面、更高效的解决方案。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3