Java中的BASE64和⼗六进制转换器
使⽤Java中的JCA(Java Cryptography Architecture)做加密、解密、签名、验签、消息摘要等操作时,由于它们的输出和输⼊⼤多是byte 数组,对于数据的存储交换不是太友好。平常的使⽤习惯,⼀般是转换成⼗六进制或Base64编码进⾏存储和交换。
在⽹上搜索有关java中Base64和⼗六进制转码⼯具时,发现很多开发者⾃⼰写了转换⼯具。what ? 难道jdk中没有现成的吗?
不喜欢重复制造轮⼦,所以就想⼀下jdk中提供的Base64 和 ⼗六进制转码⼯具。好在运⽓不错,现把到的⼯具记录如下,以备后⽤。
⼗六进制转换⼯具 (HexBinaryAdapter,DatatypeConverter,BigInteger)
HexBinaryAdapter
HexBinaryAdapter 的 全类名为:l.bind.annotation.adapters.HexBinaryAdapter。
HexHexBinaryAdapter 中提供了两个⽅法,marshal,unmarshal。
1. public String marshal(byte[] bytes);
把 byte 数据转换成⼗六进制的字符串表⽰。
2. public byte[] unmarshal(String s);
字符串表⽰的⼗六进制数据转换成 byte 数组。
DatatypeConverter
DatatypeConverter 的全类名为:l.bind.DatatypeConverter。
DatatypeConverter 并不单单是为⼗六进制⽽⽣的,看名字就知道它是为数据类型转换⽽⽣的。其实在 HexHexBinaryAdapter 中也是调⽤了这个⼯具进⾏的⼗六进制字符串与byte数组之间的转换。
DatatypeConverter 中的⽅法分为两类:printXXXX 和 parseXXYY。其中printXXYY 是把YY类型的数据转字符串表⽰的XX类型数据,
⽽parseXXYY 是把字符串表⽰的YY类型数据转换为XX类型数据。这⾥重点说四个⽅法:
1. public static String printHexBinary( byte[] val );
把byte数组转换成字符串表⽰的⼗六进制数据。
2. public static String printBase64Binary( byte[] val );
把byte数组转换成Base64编码的字符串。
3. public static byte[] parseHexBinary( String lexicalXSDHexBinary );
把字符串形式的⼗六进制数据转换成byte数组
万能在线进制转换器转换器网
4. public static byte[] parseBase64Binary( String lexicalXSDBase64Binary );
把Base64编码的字符串转换成byte数组
BigInteger
BigInteger 的全类名为java.math.BigInteger。
它有⼀个⽅法 public String toString(int radix)可以把当前“⼤数”转换为任意进制(2-36)的字符串。并且BigInteger有⼀个构造⽅法public BigInteger(int signum, byte[] magnitude) 可以把⼀个byte数据组构造成⼀个“正整⼤数”。利⽤这些特性可以把⼀个byte数据转换成⼗六进制字符
BASE64Encoder中的⽅法
image.png
总结
对于Base64的编码与解码,Base64的输⼊和输出不仅⽀持字符串,还可以是byte数组,输⼊/输出流等。可根据实际应⽤灵活选择。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。