Java 中將 Short 轉換為 byte[]

banq發表於2024-05-08

將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] 中獲得的。

相關文章