美文网首页java
Java 中的 BASE64 和 十六进制转换器

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

作者: JSON_NULL | 来源:发表于2019-01-23 12:09 被阅读33次

    使用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数组,输入/输出流等。可根据实际应用灵活选择。

    相关文章

      网友评论

        本文标题:Java 中的 BASE64 和 十六进制转换器

        本文链接:https://www.haomeiwen.com/subject/dcrjjqtx.html