package hamaster.gradesgin.ibe.io; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Arrays; /** * 安全字节数组输出流 完成操作后会擦出内存中分配空间的数据 * @author Wang Ye */ public class SecureByteArrayOutputStream extends ByteArrayOutputStream { /** * 新建一个安全输出流 容量32字节并自动增长 */ public SecureByteArrayOutputStream() { super(); } /** * 新建一个特定容量的安全输出流 * @param size 初始容量 */ public SecureByteArrayOutputStream(int size) { super(size); } /** * 重置输出流并擦出已经输出的数据 * @see java.io.ByteArrayOutputStream#reset() */ @Override public synchronized void reset() { super.reset(); Arrays.fill(buf, (byte) 0); } /** * 擦出已经输出的数据并关闭输出流 * @throws IOException 擦出过程发生的任何异常都将被抛出 * @see java.io.ByteArrayOutputStream#close() */ @Override public void close() throws IOException { try { reset(); } catch (Throwable t) { throw new IOException(t); } super.close(); } }