字节数组转码

在 Apache Commons Codec 库中提供了 BinaryCodec 类,我们可以使用该类实现将字节数组和 “0” 和 “1” 的字符串之间转换。

注意:此类是不可变的并且是线程安全的。

方法说明

解码方法

解码指将二进制字符串解析成对应的 ASCII 字符。如:二进制字符串 “01000001” 解析后得到 “A”。方法如下:

  • byte[] decode(byte[] ascii) 

  • Object decode(Object ascii)

用法如下:

BinaryCodec binaryCodec = new BinaryCodec();
byte[] decodeResult = binaryCodec.decode("01000001".getBytes());
System.out.println(new String(decodeResult)); // 输出:A

decodeResult = (byte[])binaryCodec.decode("01000001");
System.out.println(new String(decodeResult)); // 输出:A

编码方法

编码指将 ASCII 字符串转换成字节数组,然后将字节数组中的每一个字节转换成一个长度为 8 的二进制字符串。例如:ASCII 字符串 “A” 编码后将得到 “01000001” 二进制字符串。方法如下:

  • byte[] encode(byte[] raw)

  • Object encode(Object raw)

用法如下:

BinaryCodec binaryCodec = new BinaryCodec();
byte[] encodeResult = binaryCodec.encode(str.getBytes());
System.out.println(new String(encodeResult)); // 输出:01000001

注意:如果调用 encode() 方法时传递的不是一个字节数组,则抛出如下错误:

Exception in thread "main" org.apache.commons.codec.EncoderException: argument not a byte array
at org.apache.commons.codec.binary.BinaryCodec.encode(BinaryCodec.java:281)
at com.huangx.codec.binary.BinaryCodecDemo.main(BinaryCodecDemo.java:16)

其他方法

  • byte[] toByteArray(String ascii) 解码一个字符串,其中字符串的每个字符代表一个 ASCII '0' 或 '1'。用法如下:

BinaryCodec binaryCodec = new BinaryCodec();
byte[] result = binaryCodec.toByteArray("01000001");
System.out.println(result); // 输出:A
  • static byte[] fromAscii(byte[] ascii) 解码一个字节数组,其中每个字节代表一个 ASCII '0' 或 '1'。

  • static byte[] fromAscii(char[] ascii) 解码一个 char 数组,其中每个 char 表示一个 ASCII '0' 或 '1'。

  • static byte[] toAsciiBytes(byte[] raw) 将原始二进制数据数组转换为 ASCII “0” 和 “1” 字符字节的数组,每个字节都是一个截断的char。

  • Converts an array of raw binary data into an array of ASCII 0 and 1 character bytes - each byte is a truncated char.

  • static char[] toAsciiChars(byte[] raw) 将原始二进制数据数组转换为 ASCII “0” 和 “1” 字符的数组。

  • static String toAsciiString(byte[] raw) 将原始二进制数据数组转换为 ASCII “0” 和 “1” 字符的字符串。

AD

实例

(1)使用 BinaryCodec 类将 ASCII 码字符串 “A” 转换成二进制字符串,即只包含 “0” 和 “1” 的字符串。

import org.apache.commons.codec.binary.BinaryCodec;

public class BinaryCodecDemo {

    public static void main(String[] args) {
        // ASCII 中的 A 等于 65,二进制为 0100 0001
        String str = "A";
        BinaryCodec binaryCodec = new BinaryCodec();

        // 将字符转换成二进制字符串表示(即0和1)
        byte[] encodeResult = binaryCodec.encode(str.getBytes());
        System.out.println(new String(encodeResult)); // 输出:01000001

        // 将二进制字符串转换成对应的字符
        byte[] decodeResult = binaryCodec.decode("01000001".getBytes());
        System.out.println(new String(decodeResult)); // 输出:A
    }

}

输出结果:

01000001
A

(2)利用 BinaryCodec 的 fromAscii() 静态方法将二进制字符串转换成字节数组。

import org.apache.commons.codec.binary.BinaryCodec;

public class BinaryCodecDemo2 {

    public static void main(String[] args) {
        // ASCII 中的 A 等于 65,B 等于 66 二进制为 0100 0001 0100 0010
        String binaryStr = "0100000101000010";
        byte[] result1 = BinaryCodec.fromAscii(binaryStr.getBytes());
        System.out.println(new String(result1));

        byte[] result2 = BinaryCodec.fromAscii(binaryStr.toCharArray());
        System.out.println(new String(result2));
    }

}

输出结果:

BA
BA

(3)利用 BinaryCodec 的静态方法 toAsciiBytes() 实现将 ASCII 字符串转换成二进制字符串。

import org.apache.commons.codec.binary.BinaryCodec;

public class BinaryCodecDemo3 {

    public static void main(String[] args) {
        // ASCII 中的 A 等于 65,B 等于 66 二进制为 0100 0001 0100 0010
        // BA 等于 0100000101000010
        String binaryStr = "BA";
        byte[] result1 = BinaryCodec.toAsciiBytes(binaryStr.getBytes());
        System.out.println(new String(result1));

        char[] result2 = BinaryCodec.toAsciiChars(binaryStr.getBytes());
        System.out.println(new String(result2));

        String result3 = BinaryCodec.toAsciiString(binaryStr.getBytes());
        System.out.println(result3);
    }

}

输出结果:

0100000101000010
0100000101000010
0100000101000010

查看 BinaryCodec 类的详细用法,请参考官网 API 文档,地址如下:

http://commons.apache.org/proper/commons-codec/apidocs/index.html

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号