文档章节

Java8 BASE64编解码的使用

独钓渔
 独钓渔
发布于 2017/03/31 17:47
字数 736
阅读 89
收藏 0

 

在Java 8中,Base64编码已经成为Java类库的标准。

java.util.Base64类:

Base64工具类提供了一套静态方法获取下面三种BASE64编解码器:
基本:输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/。(getEncoder,getDecoder)
URL:输出映射到一组字符A-Za-z0-9+_,输出是URL和文件。(getUrlEncoder,getUrlDecoder)
MIME:输出隐射到MIME友好格式。输出每行不超过76字符,并且使用'\r'并跟随'\n'作为分割。编码输出最后没有行分割。(getMimeEncoder,getMimeDecoder)

 

内嵌类
static class Base64.Decoder
该类实现一个解码器用于,使用 Base64 编码来解码字节数据。
static class Base64.Encoder
该类实现一个编码器,使用 Base64 编码来编码字节数据。

 

方法
static Base64.Decoder getDecoder()
返回一个 Base64.Decoder ,解码使用基本型 base64 编码方案。
static Base64.Encoder getEncoder()
返回一个 Base64.Encoder ,编码使用基本型 base64 编码方案。
static Base64.Decoder getMimeDecoder()
返回一个 Base64.Decoder ,解码使用 MIME 型 base64 编码方案。
static Base64.Encoder getMimeEncoder()
返回一个 Base64.Encoder ,编码使用 MIME 型 base64 编码方案。
static Base64.Encoder getMimeEncoder(int lineLength, byte[] lineSeparator)
返回一个 Base64.Encoder ,编码使用 MIME 型 base64 编码方案,可以通过参数指定每行的长度及行的分隔符。
static Base64.Decoder getUrlDecoder()
返回一个 Base64.Decoder ,解码使用 URL 和文件名安全型 base64 编码方案。
static Base64.Encoder getUrlEncoder()
返回一个 Base64.Encoder ,编码使用 URL 和文件名安全型 base64 编码方案。

 

java8中的Base64可以支持流。

EncOutputStream和DecInputStream这两个内部类就是当作用于对流的支持,

在 Base64.Encoder和Base64.Decoder 中使用wrap这个包装函数就是返回创建这两个类变返回。

 

 

使用:

package com.imddy.sms.util;

import java.io.UnsupportedEncodingException;
import java.util.Base64;
import java.util.UUID;
import javax.xml.bind.DatatypeConverter;

public class Jdk8Base64 {

	public static void main(String[] args) throws Exception {
//		String asB64 = Base64.getEncoder().encodeToString("some string".getBytes("utf-8"));  
//		System.out.println(asB64); // 输出为: c29tZSBzdHJpbmc=  
		try {
	         // 使用基本编码
	         String base64encodedString = Base64.getEncoder().encodeToString("runoob?java8".getBytes("utf-8"));
	         System.out.println("Base64 比那么字符串 (基本) :" + base64encodedString);
	         // 解码
	         byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString);
	         System.out.println("原始字符串: " + new String(base64decodedBytes, "utf-8"));
	         base64encodedString = Base64.getUrlEncoder().encodeToString("TutorialsPoint?java8".getBytes("utf-8"));
	         System.out.println("Base64 编码字符串 (URL) :" + base64encodedString);
	         StringBuilder stringBuilder = new StringBuilder();	        
	         for (int i = 0; i < 10; ++i) {
	            stringBuilder.append(UUID.randomUUID().toString());
	         }	        
	         byte[] mimeBytes = stringBuilder.toString().getBytes("utf-8");
	         String mimeEncodedString = Base64.getMimeEncoder().encodeToString(mimeBytes);
	         System.out.println("Base64 编码字符串 (MIME) :" + mimeEncodedString);	         
	      }catch(UnsupportedEncodingException e){
	         System.out.println("Error :" + e.getMessage());
	      }
	}	
}

 

Base64对流的操作:

public void wrapping() throws IOException {
  String src = "This is the content of any resource read from somewhere" +
    " into a stream. This can be text, image, video or any other stream.";

  // 编码器封装OutputStream, 文件/tmp/buff-base64.txt的内容是BASE64编码的形式
  try (OutputStream os = Base64.getEncoder().wrap(newFileOutputStream("/tmp/buff-base64.txt"))) {
    os.write(src.getBytes("utf-8"));
  }

  // 解码器封装InputStream, 以及以流的方式解码, 无需缓冲
  // is being consumed. There is no need to buffer the content of the file just for decoding it.
  try (InputStream is = Base64.getDecoder().wrap(newFileInputStream("/tmp/buff-base64.txt"))) {
    int len;
    byte[] bytes = new byte[100];
    while ((len = is.read(bytes)) != -1) {
      System.out.print(new String(bytes, 0, len, "utf-8"));
    }
  }
}

 

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
独钓渔
粉丝 48
博文 385
码字总数 148158
作品 0
沙坪坝
系统管理员
私信 提问
Java8 BASE64编解码

Java8 BASE64编解码 Base64是一种用64个字符来表示任意二进制数据的方法。 Base64是一种最常见的二进制编码方法。 Java一直缺少BASE64编码 API,以至于通常在项目开发中会选用第三方的API...

秋风醉了
2015/04/02
0
0
SLICE30K/Base64.js

Base64.js 如果这个项目对你有帮助或者你觉得这个项目还不错的话,给点个星呗! 简介 虽然JavaScript中可以使用原生的btoa和atob函数进行Base64的编解码。但是不支持中文字符,并且不支持url...

SLICE30K
2017/05/22
0
0
Base64系列第一篇 Base64介绍

本文地址:http://blog.csdn.net/morewindows/article/details/11871429转载请标明出处,谢谢。 欢迎关注微博:http://weibo.com/MoreWindows 本系列一共四篇: 1. 《Base64系列第一篇 Base...

morewindows
2013/10/29
0
0
用openssl的evp进行base64编解码 C++

使用openssl的evp进行base64编解码有2种方式: 第一种: #include "openssl/evp.h" include "string" /** **/std::string base64_encodestring(const std::string &text ){ } std::string ba......

zmldndx
2014/03/17
0
0
Base64 编解码

测试Apache Base64和sun公司专有包BASE64Decoder、BASE64Encoder的编解码是否一致的代码: 测试结论: Base64的编解码优先使用Apache Base64。...

有钱有爱
2016/04/27
87
0

没有更多内容

加载失败,请刷新页面

加载更多

使用Maven打包Docker镜像-Jenkins版

前提:Jenkins服务器上安装好Docker,创建Jenkins任务,配置好代码来源,和Build配置: pom.xml中添加docker-maven-plugin: <plugin> <groupId>com.spotify</groupId> <artifactI......

莫在全
33分钟前
4
0
rabbitmq

灰暗
今天
1
0
Flink

flink HA部署 flink搭建,采用分布式部署方式,分别为A,B,C三个节点。其中A为master;A,B,C为worker。 本文使用的用户是hadoop用户(自己新建) 先决条件 Java 1.8.x or higher scala 自己使用...

-九天-
今天
2
0
数据中台和传统数仓的区别

中台系统把业务层同性的算法能力,服务能力,业务能力高度集成,有效组织 ,动态规划。更好的帮助上层业务。 今天就让我们看看关于数据中台的问答吧。 1 Q : 什么是数据中台? A : 数据中台是...

hblt-j
今天
6
0
Java在什么时候会出现内存泄漏

在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对...

群星纪元
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部