在 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