Base64是常用的字符编码,但它并不是安全领域下的加密/解密算法,它到核心作用是传输数据的正确性。

由于有些网关或系统只能使用ASCII字符,而Base64就可以将非ASCII字符转换为ASCII字符,因此特别适合HTTP,mime协议下传输数据。

JDK

在JDK 1.6之前,JDK核心类一直没有Base64的实现类,因此当时有建议使用Sun/Oracle JDK里的sun.misc.BASE64Encoder和sun.misc.BASE64Decoder,这样可以不依赖第三方类库,但是在未来版本可能会删除,而且性能不佳。

此外,JDK 1.在javax.xml.bind.DatatypeConverter有两个静态方法parseBase64Binary和printBase64Binary。

JDK 8

在Java 8的java.util包实现BASE64编码/解码功能。

java.util.Base64提供3种BASE64编码/解码器:

  • Basic编码:标准的BASE64编码,处理常规需求

  • URL编码:使用下划线替换URL里面的反斜线“/”

  • MIME编码:使用基本字母数字产生BASE64输出,每一行不超出76个字符,且每行以\r\n结束

BASIC编码

// 编码

String asB64 = Base64.getEncoder().encodeToString("some string".getBytes("utf-8"));

System.out.println(asB64); // 输出为: c29tZSBzdHJpbmc=
// 解码

byte[] asBytes = Base64.getDecoder().decode("c29tZSBzdHJpbmc=");

System.out.println(new
String(asBytes, "utf-8")); // 输出为: some string

URL编码

String urlEncoded = Base64.getUrlEncoder().encodeToString("subjects?abcd".getBytes("utf-8"));

System.out.println("Using URL Alphabet: "  + urlEncoded);

// 输出为:

Using URL Alphabet: c3ViamVjdHM_YWJjZA==

MIME编码

StringBuilder sb = new
StringBuilder();

for(int t = 0; t < 10; ++t) {
  sb.append(UUID.randomUUID().toString());
}

byte[] toEncode = sb.toString().getBytes("utf-8");

String mimeEncoded = Base64.getMimeEncoder().encodeToString(toEncode);

System.out.println(mimeEncoded);

第三方实现

Apache Commons Codec library提供org.apache.commons.binary.Base64

Google Guava提供com.google.common.io.BaseEncoding.base64()

net.iharder.Base64提供

号称Base64编码速度最快的MigBase64

性能测试

定义两个接口

private static  interface  Base64Codec
{
public String encode(final byte[] data);
public byte[] decode(final String base64) throws IOException;
}
private static  interface  Base64ByteCodec
{
public byte[] encodeBytes(final byte[] data);
public byte[] decodeBytes(final byte[] base64) throws IOException;
}

【参考】

1。https://blog.csdn.net/u013476542/article/details/53213783

results matching ""

    No results matching ""