You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Java中字节数组转Base64存入JSON时的随机异常排查

问题分析与解决方案

问题根源

你遇到的随机异常和文件大小相关,核心原因是默认的Base64编码会自动插入换行符(每76个字符一行):

  • 小文件编码后长度不足76,无换行符,JSON解析正常;
  • 大文件编码后包含换行符,破坏JSON字符串结构,导致解析失败。
    另外,标准Base64的/字符在部分传输场景中可能被误处理,但本身属于JSON合法字符。

可行解决方案

方案1:修正URL_SAFE编码,禁用换行

在编码时组合Base64.URL_SAFE和Base64.NO_WRAP参数,生成无换行的URL安全Base64字符串,既避免/带来的传输问题,又保证JSON格式正确:

byte[] byteArray = Files.toByteArray(zipFile);
// 组合参数生成无换行的URL安全Base64
String strLogEncode = Base64.encodeToString(byteArray, Base64.URL_SAFE | Base64.NO_WRAP);
jObjLogdata.put("LogFilePath", "");
jObjLogdata.put("file_byte_array", strLogEncode);

服务端解码说明:使用URL安全的Base64解码器,将-转回+、_转回/,处理填充符=后即可还原字节数组,进而恢复Zip文件。

方案2:使用标准Base64编码(禁用换行)

如果/字符的传输问题是中间环节误处理导致,标准Base64本身完全兼容JSON,只需禁用换行即可:

byte[] byteArray = Files.toByteArray(zipFile);
// 标准Base64+无换行
String strLogEncode = Base64.encodeToString(byteArray, Base64.DEFAULT | Base64.NO_WRAP);
jObjLogdata.put("LogFilePath", "");
jObjLogdata.put("file_byte_array", strLogEncode);

服务端解码说明:直接用标准Base64解码器即可还原字节数组。


额外建议

  • 确保客户端编码模式与服务端解码模式严格匹配,避免因规则不一致导致解码失败;
  • 若Zip文件体积过大,建议改用multipart/form-data二进制上传,避免Base64带来的33%体积膨胀,提升传输效率。

内容的提问来源于stack exchange,提问作者Rineesh Ch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:18:18