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

Java byte[] 與 int 互轉兩種高效實現

     編輯:Java 相關知識

場景

網絡通訊、二進制協議解析中,頻繁需要將 4 字節 byte[] 與 int 互轉(大端序)。

方法一:位運算(零依賴、最高性能)

/** int -> byte[] (大端序) */
public static byte[] intToBytes(int value) {
    return new byte[] {
        (byte) (value >>> 24),
        (byte) (value >>> 16),
        (byte) (value >>> 8),
        (byte) value
    };
}

/** byte[] -> int (大端序,長度必須≥4) */
public static int bytesToInt(byte[] bytes) {
    return ((bytes[0] & 0xFF) << 24) |
           ((bytes[1] & 0xFF) << 16) |
           ((bytes[2] & 0xFF) << 8)  |
           (bytes[3] & 0xFF);
}

方法二:DataOutputStream / DataInputStream(標準庫、易讀)

import java.io.*;

public static byte[] intToBytes2(int value) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(baos);
    dos.writeInt(value); // 自動大端序
    return baos.toByteArray();
}

public static int bytesToInt2(byte[] bytes) throws IOException {
    DataInputStream dis = new DataInputStream(new ByteArrayInputStream(bytes));
    return dis.readInt();
}

測試驗證

public static void main(String[] args) throws IOException {
    int val = 0x01020304;
    byte[] b1 = intToBytes(val);
    byte[] b2 = intToBytes2(val);
    System.out.println(Arrays.equals(b1, b2)); // true
    System.out.println(bytesToInt(b1) == val); // true
    System.out.println(bytesToInt2(b2) == val); // true
}

性能對比

方法耗時 (1000萬次)優點缺點
位運算~15 ms極快、無對象創建手寫易出錯
DataStream~120 ms標準庫、自動處理端序創建流對象、拋檢查異常

建議

  • 高頻調用、性能敏感場景:位運算。
  • 業務邏輯、代碼可讀性優先:DataStream。
  • 注意端序一致性(Java 默認大端序),跨語言通訊雙端需約定一致。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved