You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:45:05