让我们考虑以下代码库:
val str = "contextId"
println (org.apache.commons.codec.binary.Base64.isBase64(str))
String(java.util.Base64.getDecoder().decode(str))
打印出来了
true
Exception in thread "main" java.lang.IllegalArgumentException: Last unit does not have enough valid bits
at java.base/java.util.Base64$Decoder.decode0(Base64.java:867)
at java.base/java.util.Base64$Decoder.decode(Base64.java:566)
at java.base/java.util.Base64$Decoder.decode(Base64.java:589)
...
对我来说这看起来很矛盾。
您能解释一下这种行为吗?
isBase64
的文档说明(强调我的)
测试给定字符串以查看它是否仅包含 Base64 字母表中的有效字符。
它没有说明字符串可以被解码或具有适当的长度。因此它返回
true
。
另一方面,
java.util.Base64.getDecoder().decode(str)
实际上尝试解码字符串,但失败了,因为字符串没有合适的长度。