我正在为一些受限环境编写自己的BASE64编码器/解码器。
我发现Base64.Encoder#encodeString中提到,它使用ISO-8859-1
来从这些编码字节构建一个字符串。
我完全可以想象ISO-8859-1
字符集也包含了所有的base64字母表。
是否有任何可能的原因不使用US-ASCII
?
我正在为一些受限环境编写自己的BASE64编码器/解码器。
我发现Base64.Encoder#encodeString中提到,它使用ISO-8859-1
来从这些编码字节构建一个字符串。
我完全可以想象ISO-8859-1
字符集也包含了所有的base64字母表。
是否有任何可能的原因不使用US-ASCII
?
我怀疑这样更有效率:将ISO-8859-1编码转换回文本只需要将每个byte
提升为一个char
,而对于ASCII,您需要检查byte
是否为有效的ASCII。当然,base64的结果始终为相同。
(这只是一个猜测,但是一个有知识的猜测。如果您想验证它,您可以随时运行基准测试...)
String(byte[] ascii, int hibyte, int offset, int count)
,这个构造函数已经被弃用,因为它只对hibyte==0
(读取iso-latin-1)有用,对于这种情况,它有一个优化的复制循环。所以在这种特定情况下,这是一种合理和优化的用法。 - Holger