【问题标题】:Return decoded String from base64-encoded ByteArrayOutputStream从 base64 编码的 ByteArrayOutputStream 返回解码的字符串
【发布时间】:2025-12-15 17:15:01
【问题描述】:

我使用DeflaterOutputStreamByteArrayOutputStream 进行测试。

String a = "Hello world";
byte[] bArr = a.getBytes();

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(bArr.length);
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(byteArrayOutputStream);

deflaterOutputStream.write(bArr);
deflaterOutputStream.close();

bArr = byteArrayOutputStream.toByteArray();

System.out.println("out: "+Base64.getEncoder().encodeToString(bArr));

结果,我得到了这个 Base64 字符串:

eJzzSM3JyVcozy/KSQEAGKsEPQ==

如何从这个 Base64 字符串中再次获取“Hello world”?

【问题讨论】:

  • 欢迎来到 Stack Overflow。请通过tour 了解 Stack Overflow 的工作原理,并阅读How to Ask 了解如何提高问题的质量。请显示您尝试过的尝试以及您从尝试中得到的问题/错误消息。
  • 如果有encodeToString 方法,也可能有decodeFromString 或类似方法?
  • 在使用不带Charset 参数的getBytes() 时要小心,因为将使用平台默认字符集,这可能是无意的。
  • knittl, encodeToString - 它只是将字节数组转换为 base64。如果你使用 decodeformString 那么你将得到字节数组 ByteArrayOutputStream 类型,但不是字符串“Hello World”。
  • 拿起绳子,把它推过你推过原件的相反过程。即将Base64解码为byte[],包装在ByteArrayInputStream中,InflaterInputStream中的所有结果读入另一个byte[],然后使用平台默认编码将其包装在String中。跨度>

标签: java base64 bytearrayoutputstream


【解决方案1】:

要找到从 Base64 字符串返回的方法,您需要像这样“膨胀”压缩内容:

    String base64 = Base64.getEncoder().encodeToString(bArr); // eJzzSM3JyVcozy/KSQEAGKsEPQ==

    // reverse
    byte[] decodedBytes = Base64.getDecoder().decode(base64);
    ByteArrayOutputStream byteArrayOutputStream2 = new ByteArrayOutputStream();
    InflaterOutputStream inflaterOutputStream = new InflaterOutputStream(byteArrayOutputStream2);
    inflaterOutputStream.write(decodedBytes);
    inflaterOutputStream.close();
    System.out.println("out: "+ byteArrayOutputStream2.toString()); // Hello World
    byteArrayOutputStream2.close();

【讨论】:

  • 一个设计良好的 Java API 来回工作.. 所以getEncoder().encode(..) 有相反的getDecoder().decode(..)。见Java Base64 Tutorial: Decode