首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 數值與位元組陣列互轉:int/long 與 byte[] 高效轉換實作

     編輯:Java 綜合教學

網路程式設計必備:基本類型與位元組陣列雙向轉換

網路傳輸、序列化、二進位協議處理常需將 int、long 轉為位元組陣列(byte[]),而非字串,以節省頻寬並提升效能。本文提供生產級工具類實作。

核心原理:位運算與大端序

採用大端序(Big-Endian,網路位元組序),高位位元組在前,低位在後。關鍵操作:

  • & 0xFF:將 byte 無符號轉為 int,避免符號位擴展
  • >> / >>>:有符號/無符號右移
  • <<:左移

完整工具類實作

public class ByteOrderUtils {

    /** int 轉 byte[4] (大端序) */
    public static byte[] int2byte(int res) {
        byte[] targets = new byte[4];
        targets[3] = (byte) (res & 0xFF);         // 最低位
        targets[2] = (byte) ((res >> 8) & 0xFF);  // 次低位
        targets[1] = (byte) ((res >> 16) & 0xFF); // 次高位
        targets[0] = (byte) (res >>> 24);         // 最高位,無符號右移
        return targets;
    }

    /** byte[4] 轉 int (大端序) */
    public static int byteArrayToInt(byte[] b) {
        byte[] a = new byte[4];
        int i = a.length - 1, j = b.length - 1;
        for (; i >= 0; i--, j--) {  // 從 b 尾部(低位)開始複製
            a[i] = (j >= 0) ? b[j] : 0;  // 不足 4 位高位補 0
        }
        int v0 = (a[0] & 0xFF) << 24;
        int v1 = (a[1] & 0xFF) << 16;
        int v2 = (a[2] & 0xFF) << 8;
        int v3 = (a[3] & 0xFF);
        return v0 + v1 + v2 + v3;
    }

    /** long 轉 byte[8] (大端序) */
    public static byte[] long2byte(long res) {
        byte[] buffer = new byte[8];
        for (int i = 0; i < 8; i++) {
            int offset = 64 - (i + 1) * 8;
            buffer[i] = (byte) ((res >> offset) & 0xFF);
        }
        return buffer;
    }

    /** byte[8] 轉 long (大端序) */
    public static long byteArrayToLong(byte[] b) {
        long values = 0;
        for (int i = 0; i < 8; i++) {
            values <<= 8;
            values |= (b[i] & 0xFF);
        }
        return values;
    }
}

關鍵細節解析

  1. 無符號處理:byte 在 Java 中為有符號(-128~127),透過 & 0xFF 轉為 0~255 無符號值,防止左移時符號位污染高位
  2. 長度容錯:byteArrayToInt 處理長度不足 4 的陣列,高位自動補 0
  3. 大端序一致性:所有方法統一採用 Big-Endian,符合網路傳輸標準

應用場景

  • 自定義二進位協議編解碼
  • 高效能序列化框架
  • 網路封包組裝與解析
  • 資料庫二進位欄位讀寫

掌握位運算轉換技巧,是處理高效能二進位資料的基礎功力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved