以流方式 (无限大小) 提供 base 16 编码和解码。Base16InputStream 的默认行为是解码,而 Base16OutputStream 的默认行为是编码,但是可以通过使用不同的构造函数来覆盖此行为。
Base16InputStream 常用构造方法定义如下:
Base16InputStream(InputStream in)
创建一个 Base16InputStream 实例,这样所有从 InputStream 参数读取的数据都可以自动解码。
Base16InputStream(InputStream in, boolean doEncode)
创建一个 Base16InputStream 实例,这样所有从 InputStream 读取的数据可以通过 doEncode 参数控制是加密还是解密。
Base16InputStream(InputStream in, boolean doEncode, boolean lowerCase)
创建一个 Base16InputStream 实例,这样所有从 InputStream 读取的数据可以通过 doEncode 参数控制是加密还是解密。
Base16InputStream(InputStream in, boolean doEncode, boolean lowerCase, CodecPolicy decodingPolicy)
创建一个 Base16InputStream 实例,根据指定的策略将所有从 InputStream 读取的数据可以通过 doEncode 参数控制是加密还是解密。
以流方式 (无限大小) 提供十六进制编码和解码。HexOutputStream 的默认行为是编码,而 Base16InputStream 的默认行为是解码。但是,可以通过使用不同的构造函数来重写此行为。
Base16OutputStream(OutputStream out)
创建一个 Base16OutputStream 实例,这样所有数据都被十六进制编码输出到参数 OutputStream 输出流中。
Base16OutputStream(OutputStream out, boolean doEncode)
创建一个 Base16OutputStream 实例,将所有数据要么是十六进制编码,要么是十六进制解码,然后将编解码结果输出到 OutputStream 输出流。
Base16OutputStream(OutputStream out, boolean doEncode, boolean lowerCase)
创建一个 Base16OutputStream 实例,将所有数据要么是十六进制编码,要么是十六进制解码,然后将编解码结果输出到 OutputStream 输出流。
Base16OutputStream(OutputStream out, boolean doEncode, boolean lowerCase, CodecPolicy decodingPolicy)
创建一个 Base16OutputStream 实例,根据指定的策略将所有数据要么是十六进制编码,要么是十六进制解码,然后将编解码结果输出到 OutputStream 输出流。
(1)读取一个文件的内容,然后将文件内容进行解密/加密,代码如下:
package com.huangx.codec.base16; import org.apache.commons.codec.binary.Base16InputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; public class Base16Demo3 { public static void main(String[] args) throws IOException { // 默认数据是解密,encode.txt 文件存放 Base16 加密后的字符串 InputStream inputStream = Base16Demo3.class.getResourceAsStream("/encode.txt"); if(null == inputStream) { throw new FileNotFoundException("没有找到资源文件 source.txt"); } Base16InputStream base16InputStream = new Base16InputStream(inputStream); byte[] buffer = new byte[1024]; int length = base16InputStream.read(buffer); System.out.println(new String(buffer, 0, length)); // 设置为加密 InputStream inputStream2 = Base16Demo3.class.getResourceAsStream("/source.txt"); if(null == inputStream2) { throw new FileNotFoundException("没有找到资源文件 source.txt"); } Base16InputStream base16 = new Base16InputStream(inputStream2, true); byte[] bytes = new byte[1024]; int len; while((len = base16.read(bytes)) != -1) { System.out.println(new String(bytes, 0, len)); } } }
(2)使用 Base16OutputStream 输出数据,这些数据将自动加密。代码如下:
package com.huangx.codec.base16; import org.apache.commons.codec.binary.Base16OutputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; public class Base16Demo4 { public static void main(String[] args) throws IOException { String str = "床前明月光,疑是地上霜。举头望明月,低头思故乡。"; ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); Base16OutputStream base16OutputStream = new Base16OutputStream(outputStream, true); base16OutputStream.write(str.getBytes()); base16OutputStream.flush(); base16OutputStream.close(); byte[] result = outputStream.toByteArray(); System.out.println(new String(result)); } }