org.apache.commons.codec.binary.BinaryCodec 类可以在“0”和“1”的字节数组和字符串之间进行转换。例如:ASCII 中的 A 等于 65,其二进制为 0100 0001,我们可以使用 BinaryCodec 类将字符串“A”转换成“01000001”二进制字符串。同时,我们也可以将二进制字符串“01000001”转换成字符串“A”(这里为了方便分析,字符串中只包含了一个A字符)。
BinaryCodec 类常用方法定义如下:
byte[] decode(byte[] ascii)
解码一个字节数组,其中每个字节表示一个ASCII‘0’或‘1’。
Object decode(Object ascii)
解码一个字节数组,其中每个字节表示一个ASCII‘0’或‘1’。
byte[] encode(byte[] raw)
将原始二进制数据数组转换为ASCII 0和1个字符的数组。
Object encode(Object raw)
将原始二进制数据数组转换为ASCII 0和1个字符的数组。
static byte[] fromAscii(byte[] ascii)
解码一个字节数组,其中每个字节表示一个ASCII‘0’或‘1’。
static byte[] fromAscii(char[] ascii)
解码一个字符数组,其中每个字符表示ASCII‘0’或‘1’。
static byte[] toAsciiBytes(byte[] raw)
将原始二进制数据数组转换为ASCII 0和1个字符字节的数组,每个字节是一个截断字符。
static char[] toAsciiChars(byte[] raw)
将原始二进制数据数组转换为ASCII 0和1个字符的数组。
static String toAsciiString(byte[] raw)
将原始二进制数据数组转换为ASCII 0和1个字符的字符串。
byte[] toByteArray(String ascii)
解码字符串,其中字符串的每个字符表示ASCII‘0’或‘1’。
(1)使用 decode() 和 encode() 方法实现字符串和二进制字符串之间相互转换,代码如下:
package com.huangx.codec.binary; 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)使用 fromAscii 静态方法快速的将二进制字符串转换成原始值,代码如下:
package com.huangx.codec.binary; 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)使用静态方法 toAsciiBytes 将给的原始字符串转换成二进制字符串,代码如下:
package com.huangx.codec.binary; 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
(4)使用静态方法 toAsciiChars 快速将原始数据转换成二进制字符串,代码如下:
package com.huangx.codec.binary; import org.apache.commons.codec.binary.BinaryCodec; public class BinaryCodecDemo4 { 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("result1=" + new String(result1)); char[] result2 = BinaryCodec.toAsciiChars(binaryStr.getBytes()); System.out.println("result2=" + new String(result2)); String result3 = BinaryCodec.toAsciiString(binaryStr.getBytes()); System.out.println("result43=" + result3); BinaryCodec binaryCodec = new BinaryCodec(); byte[] result4 = binaryCodec.toByteArray(result3); System.out.println("result4=" + new String(result4)); } }
运行上面代码,输出结果如下:
result1=0100000101000010 result2=0100000101000010 result43=0100000101000010 result4=BA