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

Python 與 Java 交互:byte[] 對應 Python bytes/base64 方案

     編輯:程式設計綜合問答

場景

Java 服務端接口要求 byte[] 參數,Python 客戶端調用,Python 無原生 byte 類型(3.x 有 bytes),如何正確傳遞?

核心方案:Base64 編碼傳輸

HTTP/JSON 不直接承載二進制,**Base64 將 byte[] 編碼為 ASCII 字符串**是標準做法。

Python 3 完整實現

import base64
import requests

def java_byte_array_to_base64(data: bytes) -> str:
    """Python bytes -> Base64 字符串 (Java byte[] 接收端需解碼)"""
    return base64.b64encode(data).decode('ascii')

def base64_to_java_byte_array(b64str: str) -> bytes:
    """Base64 字符串 -> Python bytes (對應 Java byte[])"""
    return base64.b64decode(b64str)

# 調用示例
file_bytes = open('image.jpg', 'rb').read()
payload = {
    'fileData': java_byte_array_to_base64(file_bytes),  # 傳字符串
    'fileName': 'image.jpg'
}
resp = requests.post('https://java-server/api/upload', json=payload)

Java 端對應處理

@PostMapping("/upload")
public Result upload(@RequestBody Map payload) {
    String base64 = payload.get("fileData");
    byte[] data = Base64.getDecoder().decode(base64); // 標準庫解碼
    // 處理 data...
}

避坑指南

  • 不要用 bytearray 直接 JSON 序列化:會變成數字數組 [72, 101, 108, 108, 111],體積膨脹 3-4 倍,Java 端需自定義反序列化。
  • 大文件分片上傳:Base64 仍在內存中,超大文件需分片/流式上傳(如 Resumable.js + 臨時文件)。
  • URL 安全 Base64:若放在 URL 參數,用 base64.urlsafe_b64encode 避免 +/= 轉義問題。

用戶確認:「正確答案 已經試過 成功 感謝開源社區」——**Base64 是跨語言二進制傳輸的通用橋梁**。

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