Java Base64编码丢失数据

Java Base64 encoding loss of data

假设我有以下代码片段,其中 certificate 是一个 java 证书对象:

byte[] data = certificate.getEncoded();

String stringData = new String(Base64.encodeBase64(data));

byte[] newData = Base64.decodeBase64(stringData)

有没有可能 data 不等于 newData?基本上,是否有信息丢失到字符串然后返回? 谢谢

假设没有因为内存不足错误或类似的一般问题而爆炸,这段代码应该没问题,但有一个很大的例外:

您正在将 Base64.encodeBase64byte[])的输出转换为 String,但未指定编码。

这通常是个坏主意,因为它将使用平台默认编码。

在这种特定情况下,这不太可能是实际问题。因为 Base64 的输出仅包含 ASCII 字符,几乎所有现代平台都使用 ASCII 兼容编码作为其平台默认编码(例如 Android、Mac OS X 和大多数 Linux 发行版使用 UTF-8,Windows 倾向于使用一些代码页,但低 128 字节通常也与 ASCII 兼容)。

不过,最好使用 new String(Base64.encodeBase64(data), StandardCharsets.US_ASCII) 来确定(由于上述原因,ISO_8859_1UTF_8 也可以,但是 US_ASCII 是“正确的”选择)。