java

Java 中的 BASE64 和 十六进制转换器

2019-01-23  本文已影响33人  JSON_NULL

使用Java中的JCA(Java Cryptography Architecture)做加密、解密、签名、验签、消息摘要等操作时,由于它们的输出和输入大多是byte数组,对于数据的存储交换不是太友好。平常的使用习惯,一般是转换成十六进制或Base64编码进行存储和交换。

在网上搜索有关java中Base64和十六进制转码工具时,发现很多开发者自己写了转换工具。what ? 难道jdk中没有现成的吗?

不喜欢重复制造轮子,所以就想找一下jdk中提供的Base64 和 十六进制转码工具。好在运气不错,现把找到的工具记录如下,以备后用。

十六进制转换工具 (HexBinaryAdapterDatatypeConverter

HexBinaryAdapter 的 全类名为:javax.xml.bind.annotation.adapters.HexBinaryAdapter

HexHexBinaryAdapter 中提供了两个方法,marshalunmarshal

  1. public String marshal(byte[] bytes);
    把 byte 数据转换成十六进制的字符串表示。

  2. public byte[] unmarshal(String s);
    字符串表示的十六进制数据转换成 byte 数组。

DatatypeConverter 的全类名为:javax.xml.bind.DatatypeConverter

DatatypeConverter 并不单单是为十六进制而生的,看名字就知道它是为数据类型转换而生的。其实在 HexHexBinaryAdapter 中也是调用了这个工具进行的十六进制字符串与byte数组之间的转换。

DatatypeConverter 中的方法分为两类:printXXXXparseXXYY。其中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数组

Base64转换工具(java.util.Base64sun.misc.BASE64Decodersun.misc.BASE64EncoderDatatypeConverter )

其中 DatatypeConverter 已经介绍过。而BASE64Decoder 和 BASE64Encoder 是一对,Base64中也有两个Encoder和Decoder内部类。

  1. Base64.getDecoder() 得到内部类Decoder的实例,支持的方法如下图所示,我们常用的应该是 public byte[] decode(String src);
Base64.Decoder中的可用方法
  1. Base64.getEncoder() 得到内部类Encoder的实例,支持的方法如下图所示,我们常用的应该是 public String encodeToString(byte[] src)
Base64.Encoder中的可用方法
  1. BASE64Encoder 中的可用方法如下图所示,我们常用的应该是public String encode(byte[] src);

    BASE64Encoder中的方法
  2. BASE64Decoder 中的可用方法如下图所示,我们常用的应该是public byte[] decodeBuffer(String src) throws IOException;

    image.png

总结

对于Base64的编码与解码,Base64的输入和输出不仅支持字符串,还可以是byte数组,输入/输出流等。可根据实际应用灵活选择。

上一篇下一篇

猜你喜欢

热点阅读