Base64

转载 https://howtodoinjava.com/java8/base64-encoding-and-decoding-example-in-java-8/

Java Base64编码和解码示例

在java 8学习系列中,我们已经学习了使用流逐行读取文件的新方法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的实例并使用它来解码基本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);
}

 

 
posted @ 2019-01-22 16:15  гàΙη  阅读(180)  评论(0编辑  收藏  举报