原创

JAVA8系列教程-Base64编码和解码示例

温馨提示:
本文最后更新于 2020年04月21日,已超过 1,427 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

在Java 8学习系列中,我们已经学习了使用stream逐行读取文件的新方法Java 8引入了与IO操作有关的另一项很好的附加功能,即对Base64的支持。在这篇文章中,我们将学习它。

什么是Base 64编码?

当您有一些二进制数据要通过网络传送时,通常不会通过将数据以原始格式通过网络转换为比特流和字节流来实现。为什么?因为某些媒体仅设计用于流文本这些协议可能会将您的二进制数据解释为不是的控制字符。

Base 64编码会将您的二进制数据转换为64个可打印ASCII字符。通常,它是针对电子邮件消息中的二进制数据和"basic"HTTP身份验证完成的。这64个可打印字符是:

  • 26个大写字母[A…Z]
  • 26个小写字母[a…z]
  • 10位数字[0…9]
  • 2个符号[ 阅读更多 ]

具有上述字符的编码字符串可以安全地在支持文本数据的网络上传输,而不必担心由于控制字符的混乱而丢失数据。

Java 8之前的Base64支持

多年来,java通过一个非公开类(因此不可使用)和java.util.prefs.Base64一个未公开的类为base 64提供了支持sun.misc.BASE64Encoder此类在公共领域中的信息也非常有限。

Java 8对Base64的支持

Java 8为Base 64编码和解码目的添加了一个类,即java.util.Base64我们将在下面的代码示例中使用它。

1)将字符串编码为base 64

这就像获取编码器实例并输入字符串以字节进行编码一样简单。

Base64.Encoder encoder = Base64.getEncoder();
String normalString = "username:password";
String encodedString = encoder.encodeToString( 
        normalString.getBytes(StandardCharsets.UTF_8) );

Output:

dXNlcm5hbWU6cGFzc3dvcmQ=

2)解码基本为64的编码字符串

这也很简单。只需获取Base64.Decoder的实例,并使用它来解码以base 64编码的字符串。

String encodedString = "dXNlcm5hbWU6cGFzc3dvcmQ=";
Base64.Decoder decoder = Base64.getDecoder();
byte[] decodedByteArray = decoder.decode(encodedString);
//Verify the decoded string
System.out.println(new String(decodedByteArray));

Output:

username:password

3)包装到以64为基数的编码输出流

如果您不想直接使用数据,而更喜欢使用流,则可以包装输出流,以便写入该输出流的所有数据都将自动进行64位基数编码。

Path originalPath = Paths.get("c:/temp", "mail.txt");
Path targetPath = Paths.get("c:/temp", "encoded.txt");
Base64.Encoder mimeEncoder = Base64.getMimeEncoder();
try(OutputStream output = Files.newOutputStream(targetPath)){
    //Copy the encoded file content to target file
    Files.copy(originalPath, mimeEncoder.wrap(output));
    //Or simply use the encoded output stream
    OutputStream encodedStrem = mimeEncoder.wrap(output);
}

这就是本主题的全部内容。这已经足够简单了。

正文到此结束
本文目录