如何实现InputStream先转base64再转byte数组 替代直接转换方案
Java实现方案
JDK 8+ 无第三方依赖版本
import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.Base64; // 业务逻辑片段 InputStream input = ...; // 步骤1:读取InputStream内容编码为Base64字符串 ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int readLen; while ((readLen = input.read(buffer)) != -1) { baos.write(buffer, 0, readLen); } String base64Content = Base64.getEncoder().encodeToString(baos.toByteArray()); // 步骤2:将Base64字符串解码为目标byte数组 byte[] targetByteArray = Base64.getDecoder().decode(base64Content);
如果你使用JDK9及以上版本,可以直接调用
input.readAllBytes()替换ByteArrayOutputStream中转逻辑,代码更简洁。
已引入Apache Commons工具包的版本
如果你项目已经依赖Commons IO和Commons Codec,可以用更精简的写法:
import org.apache.commons.io.IOUtils; import org.apache.commons.codec.binary.Base64; import java.io.InputStream; // 业务逻辑片段 InputStream input = ...; String base64Content = Base64.encodeBase64String(IOUtils.toByteArray(input)); byte[] targetByteArray = Base64.decodeBase64(base64Content);
注意事项
- 大文件流场景不建议一次性全量读取到内存,避免触发OOM,可改为分段处理Base64编解码
- 如果需要生成URL安全的Base64格式,编码时替换为
Base64.getUrlEncoder(),解码对应使用Base64.getUrlDecoder()
内容的提问来源于stack exchange,提问作者Ranjeet
相关产品推荐
相关产品推荐

