我想在java中使用base64,经过google,我发现很多库都提供了自己的base64 util,例如hadoop,apache codec,apache dbutil。而java没有,sun.misc中只有一个base64 util,它是sun(oracle)的供应商相关api。
为什么有这么多选择?
使用 sun.* 总是一个坏主意,因为如果在任何其他 jvm 上运行您的代码将会中断(有 ibm 和其他没有任何 sun.* 类的 jvm)。
大多数自行开发的库都这样做是因为他们不想产生依赖关系,并且因为 base64 编码并不难做到。
只需选择一个外部库(最好是最小的,依赖最少的)并使用它。我个人会采用apache commons codec,因为 base64 是库的主要目的之一,而不是去其他一些旨在做完全不同的事情并且恰好有 base64 的库
那么我应该选择哪一个呢?
最适合您要求的一种。(或者您的代码已经依赖的库提供的库。)除此之外,这主要是(主观)偏好问题。
但不要使用“sun.misc”,因为它可以更改或撤销,恕不另行通知。
为什么有这么多选择?
没有人负责协调进入 3rd 方库的内容。在没有协调员的情况下,存在重复工作和冗余实施的空间。这就是这里发生的事情。
如果 Sun 认为适合创建一个公共 base64 API ......很多年前......我们很可能都在使用它。但他们没有。
但这并不重要。
为什么会有这么多 Base64 实现?
主要是因为 base64 实现不难编写,并且可以轻松避免代码中的额外依赖。也就是说,如果您已经在使用可以进行 base64 编码的库,那么使用库版本是有意义的。
我很幸运使用Google Guava库进行 base 64 编码。它们不仅简洁、快速和广泛使用,而且还经过了很好的测试。做base64编码和解码的API简洁易读:
BaseEncoding.base64().encode("foo");
强烈推荐!