Java实现哈夫曼编码时如何将'0'/'1'类型char转换为bit写入二进制文件
成员变量定义
你需要先给所在类新增3个成员变量:
// 缓存未凑够8位的bit private int bitBuffer = 0; // 记录当前缓存的bit数量 private int bitCount = 0; // 二进制文件输出流,提前初始化完成 private OutputStream outputStream;
writeBit 方法实现
public void writeBit(char bit) { //PRE:bit == '0' || bit == '1' try { // char转对应bit值:利用ASCII码特性直接做减法,得到0或1的整数 int bitVal = bit - '0'; // 缓存左移1位腾出位置,把新bit放到最低位 bitBuffer = (bitBuffer << 1) | bitVal; bitCount++; // 凑够8位就写入1字节,重置缓存和计数 if (bitCount == 8) { outputStream.write(bitBuffer); bitBuffer = 0; bitCount = 0; } } catch (IOException e) { System.out.println(e); } }
收尾处理注意
所有编码bit写完后需要额外实现调用flush方法,避免最后不足8位的残留bit丢失:
public void flush() throws IOException { // 不足8位的部分补0凑够1字节再写入 while (bitCount != 0) { writeBit('0'); } outputStream.flush(); outputStream.close(); }
如果你的哈夫曼编码要求不能随便补0,可以额外记录最后一个字节的有效bit数,写入文件头供解码时识别处理即可。
内容的提问来源于stack exchange,提问作者WeekendJedi
相关产品推荐
相关产品推荐

