Java 中将 Short 转换为 byte[]

将Short转换为byte[]数组是 Java 编程中的常见任务,尤其是在处理二进制数据或网络通信时。

在本教程中,我们将探索有效实现此转换的各种方法。

使用ByteBuffer类(Java NIO)
Java NIO包提供了ByteBuffer类,它简化了原始数据类型到字节数组的转换。让我们看一下如何使用它将短值转换为byte[]数组:

short shortValue = 12345;
byte[] expectedByteArray = {48, 57};
@Test
public void givenShort_whenUsingByteBuffer_thenConvertToByteArray() {
    ByteBuffer buffer = ByteBuffer.allocate(2);
    buffer.putShort(shortValue);
    byte[] byteArray = buffer.array();
    assertArrayEquals(expectedByteArray, byteArray);
}

在这个方法中,我们使用allocate()方法分配一个容量为 2 个字节的ByteBuffer来容纳ShortValue。接下来,我们利用putShort()方法将ShortValue的二进制表示形式写入缓冲区对象。此操作导致缓冲区包含ShortValue的字节表示形式。

然后,我们使用array()方法从缓冲区中提取名为byteArray的字节数组,该方法检索与存储的短值对应的字节数组。

最后,我们使用assertArrayEquals()方法断言byteArray与expectedByteArray匹配,确保转换过程的准确性。

使用DataOutputStream类
另一种方法是利用DataOutputStream类,它提供了一种完成转换过程的有效方法。让我们看看如何实现这种方法:

@Test
public void givenShort_whenUsingDataOutputStream_thenConvertToByteArray() throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(baos);
    dos.writeShort(shortValue);
    dos.close();
    byte[] byteArray = baos.toByteArray();
    assertArrayEquals(expectedByteArray, byteArray);
}

在此测试方法中,我们首先利用DataOutputStream类将短值写入名为baos的ByteArrayOutputStream对象。

此外,我们调用writeShort()方法将ShortValue序列化为表示其二进制形式的两个字节。随后,我们使用toByteArray()方法从baos中检索结果字节数组。

手动位操作
此方法通过显式操作短值的位来将最高有效字节(MSB) 和最低有效字节(LSB) 组件隔离并存储在字节数组的相应位置,从而有效地将短值转换为字节数组。

让我们深入研究一下实现:

@Test
public void givenShort_whenUsingManualBitManipulation_thenConvertToByteArray() {
    byte[] byteArray = new byte[2];
    byteArray[0] = (byte) (shortValue >> 8);
    byteArray[1] = (byte) shortValue;
    assertArrayEquals(expectedByteArray, byteArray);
}

在这里,我们首先通过将shortValue右移8位(shortValue >> 8 )来提取MSB ,并将结果转换为字节以存储在byteArray[0]中。类似地, shortValue的最低有效字节 (LSB)是通过将其直接转换为字节然后将其存储在byteArray[1] 中获得的。