Base64是一种能将任意内容使用64个字符组合成字符串的方法,同时他们之间可以进行相互转化。
一般使用Base64有三种方法:
1、通过导入sun.misc.BASE64Decoder.jar 来使用其中的类BASE64Decoder和BASE64Encoder
但是这种方法的编码和解码的效率并不好,而且基本上已经停止更新了。
2、通过Apache Commons Codec来进行编码和解码 ,但是仍然需要导入org.apache.commons.codec.binary.Base64
3、使用java.util套件中,新增了Base64的类别,效率比sun.misc.BASE64Decoder.jar要高出许多,而且并不需要导入其他的jar包
下面就简单的来实现对他们的实现
一、使用sun.misc.BASE64Decoder.jar(使用BaseEncode和BaseDecoder内封装的方法)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package base; import java.io.IOException; import Decoder.BASE64Decoder; import Decoder.BASE64Encoder; public class Baseutils { public static String encryptBase64(byte[] data) { return new BASE64Encoder().encode(data) ; } //将所传入的字节数组进行加密 public static String decryptBase64(String data) throws IOException { byte[] resultBytes=new BASE64Decoder().decodeBuffer(data); return new String(resultBytes); } } |
调用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package base; import java.io.IOException; public class Demo1 { public static final String Data="yangdidilove"; public static void main(String[] args) throws IOException { String base64Result=Baseutils.encryptBase64(Data.getBytes()); //对传入的字符串进行base64的转化 System.out.println(Data+" .>>>>Base64编码>>>>"+base64Result); String base64String=Baseutils.decryptBase64(base64Result); System.out.println(base64Result+" >>>>Base64解码>>>>"+base64String); } } |
实现结果:
1 2 | yangdidilove .>>>>Base64编码>>>>eWFuZ2RpZGlsb3Zl eWFuZ2RpZGlsb3Zl >>>>Base64解码>>>>yangdidilove |
二、使用Apache Commons Codec(创建Base对象,并使用内的方法)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package base; import java.io.UnsupportedEncodingException; import org.apache.commons.codec.binary.Base64; public class ApacheDemo { public static void main(String[] args) throws UnsupportedEncodingException { Base64 base64=new Base64(); //创建binary.Base64对象 String text="那个,我想对你说"; byte[] textByte=text.getBytes("UTF-8"); String encodeText=base64.encodeAsString(textByte); //编码 System.out.println("编码的结果为"+encodeText); String decodeText1=new String(base64.decode(encodeText),"utf-8"); System.out.println("解码的结果"+decodeText1); } } |
实现结果:
1 2 | 编码的结果为6YKj5LiqLOaIkeaDs+WvueS9oOivtA== 解码的结果那个,我想对你说 |
三、使用新增了Base64的类别(创建Decoder和Encoder)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package base; import java.io.UnsupportedEncodingException; import java.util.Base64; import java.util.Base64.*; import java.util.Base64.Decoder; public class Java_internal_base64 { public static void main(String[] args) throws UnsupportedEncodingException { Decoder decoder=Base64.getDecoder(); Encoder encoder=Base64.getEncoder(); String text = "那个,我想对你说"; byte[] bs=text.getBytes("UTF-8"); //编码 String encodedText=encoder.encodeToString(bs); System.out.println("编码后的结果为 "+encodedText); //解码 String string=new String( decoder.decode(encodedText),"UTF-8"); System.out.println("解码后的结果为(也就是结果) "+string); } } |
实现结果:
1 2 | 编码后的结果为 6YKj5LiqLOaIkeaDs+WvueS9oOivtA== 解码后的结果为(也就是结果) 那个,我想对你说 |
四、编码其他信息(sao)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package base; import java.io.UnsupportedEncodingException; import java.util.Base64; import java.util.Base64.*; import java.util.Base64.Decoder; public class Java_internal_base64 { public static void main(String[] args) throws UnsupportedEncodingException { Decoder decoder=Base64.getDecoder(); Encoder encoder=Base64.getEncoder(); String text = "\n那个,我想对你说:\n即使跟你说一句话我都觉得很开心,但是我不知道该怎样表达我对你的感觉.\n扬弟弟会努力的变成一座山给你依靠"; byte[] bs=text.getBytes("UTF-8"); //编码 String encodedText=encoder.encodeToString(bs); System.out.println("编码后的结果为 "+encodedText); //解码 String string=new String( decoder.decode(encodedText),"UTF-8"); System.out.println("解码后的结果为 "+string); } } |
实现结果:
1 2 3 4 5 | 编码后的结果为 CumCo+S4qizmiJHmg7Plr7nkvaDor7Q6CuWNs+S9v+i3n+S9oOivtOS4gOWPpeivneaIkemDveinieW+l+W+iOW8gOW/gyzkvYbmmK/miJHkuI3nn6XpgZPor6XmgI7moLfooajovr7miJHlr7nkvaDnmoTmhJ/op4kuCuaJrOW8n+W8n+S8muWKquWKm+eahOWPmOaIkOS4gOW6p+Wxsee7meS9oOS+nemdoA== 解码后的结果为 那个,我想对你说: 即使跟你说一句话我都觉得很开心,但是我不知道该怎样表达我对你的感觉. 扬弟弟会努力的变成一座山给你依靠 |
五、效率测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package base; import java.io.IOException; public class Demo1 { public static final String Data="\n那个,我想对你说:\n即使跟你说一句话我都觉得很开心,但是我不知道该怎样表达我对你的感觉.\n扬弟弟会努力的变成一座山给你依靠"; public static void main(String[] args) throws IOException { long start=System.currentTimeMillis(); for(int i=0;i<1000;i++) { String base64Result=Baseutils.encryptBase64(Data.getBytes()); String base64String=Baseutils.decryptBase64(base64Result); } long end=System.currentTimeMillis(); System.out.println("运行时间"+(end-start)); } } |
结果:
1 | 运行时间186 |
另一个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | package base; import java.io.UnsupportedEncodingException; import java.util.Base64; import java.util.Base64.*; import java.util.Base64.Decoder; import java.util.logging.Logger; public class Java_internal_base64 { public static void main(String[] args) throws UnsupportedEncodingException { Decoder decoder=Base64.getDecoder(); Encoder encoder=Base64.getEncoder(); String text = "\n那个,我想对你说:\n即使跟你说一句话我都觉得很开心,但是我不知道该怎样表达我对你的感觉.\n扬弟弟会努力的变成一座山给你依靠"; byte[] bs=text.getBytes("UTF-8"); //编码 long start=System.currentTimeMillis(); for(int i=0;i<1000;i++) { String encodedText=encoder.encodeToString(bs); //解码 String string=new String( decoder.decode(encodedText),"UTF-8"); } long end=System.currentTimeMillis(); System.out.println("运行时间"+(end-start)); } } |
结果:
1 | 运行时间35 |