在实现Huffman树时,压缩和解压需要从文件中按位读取,即一次只读一个位或者写一个位。
《算法(第四版)》中提供了一种实现方法,StdIn类和StdOut类,豁然开朗。
按位读取
方法:
1. 开辟一个缓冲区int buffer
,用于储存位,并记录缓冲区中bit数n
2. 缓冲区不为空时,进行位运算buffer>>(n-1)
,即为buffer中的最高位,实现读取一个位的操作
例:
buffer(二进制表示) | 11001010 |
---|---|
n | 8 |
buffer向右移7个位buffer >> (8-1)
,即可得到最高位1
public static boolean readBoolean() {
if (isEmpty()) throw new NoSuchElementException("Reading from empty input stream");
n--;
boolean bit = ((buffer >> n) & 1) == 1;
if (n == 0) fillBuffer();
return bit;
}
其他部分实现
public final