jdk1.8——Base64

jdk1.8新增了Base64编解码功能;

提供了3种Base64编码方式:

  1. Basic:Base64.getEncoder()和Base64.getDecoder()

编码输出组成:大小写字母、数字、+、/

如果编码后的二进制长度非3的倍数则会使用=补齐,所以编码后会有0-2个=在结尾,不需要补齐可以使用Base64.getEncoder().withoutPadding();(下同)

  1. URL and Filename safe:Base64.getUrlEncoder()和Base64.getUrlDecoder()

编码输出组成:大小写字母、数字、-、_

编码后不包含“/”等特殊字符,不会对url或者文件名或者路径造成干扰;

  1. MIME:Base64.getMimeEncoder()、Base64.getMimeEncoder(lineLength, lineSeparator)和Base64.getMimeDecoder()

编码输出组成跟Basic一样,不过限制了每行的长度和每行的分隔符,默认的每行不超过76个字符并且用\r\n作为换行符,也可以自定义行长度和行分隔符;

指定行长的时候会四舍五入到4的倍数长度(向下取到4的倍数的长度,如果长度<=0则不会分行);

指定的分隔符不能包含编码表里的字符(不能包含Basic里的:大小写字母、数字、+、/,但是可以包含-和_);

Encoder可以使用的编码方法:

Decoder可以使用的解码方法:

小Demo:

@Test
	public void test() {
		System.out.println("========1=======");
		Encoder baseEncoder = Base64.getEncoder();
		Decoder baseDecoder = Base64.getDecoder();
		String s1 = baseEncoder.encodeToString("12345678?abcd".getBytes());
		System.out.println(s1);
		byte[] bytes1 = baseDecoder.decode(s1);
		System.out.println(new String(bytes1));
		
		System.out.println("========2=======");
		Encoder urlEncoder = Base64.getUrlEncoder();
		Decoder urlDecoder = Base64.getUrlDecoder();
		String s2 = urlEncoder.encodeToString("12345678/abcde".getBytes());
		System.out.println(s2);
		byte[] bytes2 = urlDecoder.decode(s2);
		System.out.println(new String(bytes2));
		
		System.out.println("========3=======");
		Encoder mimeEncoder = Base64.getMimeEncoder();
		Decoder mimeDecoder = Base64.getMimeDecoder();
		String s3 = mimeEncoder.encodeToString("123abc测试123abc测试123abc测试123abc测试123abc测试123abc测试".getBytes());
		System.out.println(s3);
		byte[] bytes3 = mimeDecoder.decode(s3);
		System.out.println(new String(bytes3));
		
		System.out.println("========4=======");
		Encoder mimeEncoder4 = Base64.getMimeEncoder(4, "~".getBytes());
		Encoder mimeEncoder5 = Base64.getMimeEncoder(5, "~".getBytes());
		Encoder mimeEncoder6 = Base64.getMimeEncoder(6, "~".getBytes());
		Encoder mimeEncoder7 = Base64.getMimeEncoder(7, "~".getBytes());
		Encoder mimeEncoder8 = Base64.getMimeEncoder(8, "_".getBytes());
		Encoder mimeEncoder9 = Base64.getMimeEncoder(9, "_".getBytes());
		Encoder mimeEncoder10 = Base64.getMimeEncoder(10, "_".getBytes());
		System.out.println(mimeEncoder4.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));
		System.out.println(mimeEncoder5.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));
		System.out.println(mimeEncoder6.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));
		System.out.println(mimeEncoder7.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));
		System.out.println(mimeEncoder8.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));
		System.out.println(mimeEncoder9.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));
		System.out.println(mimeEncoder10.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));
	}

输出:

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值