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

如何从byte array生成bit stream,实现比特流逐位遍历读取?

自定义BitStream实现(Java版)

核心逻辑

自定义工具类维护三个核心变量即可实现逐位读取能力:

  • 输入的原始字节数组 byte[] buffer
  • 当前读取到的字节下标 int byteIndex
  • 当前字节内的比特偏移量 int bitOffset(取值0-7)

完整实现代码

public class BitStream {
    private final byte[] buffer;
    private int byteIndex;
    private int bitOffset;

    public BitStream(byte[] buffer) {
        this.buffer = buffer;
        this.byteIndex = 0;
        this.bitOffset = 0;
    }

    // 判断是否存在未读取的比特
    public boolean hasNext() {
        return byteIndex < buffer.length;
    }

    // 读取单个比特,返回值为0/1,无剩余比特时返回-1
    public int read() {
        if (!hasNext()) {
            return -1;
        }
        // 默认为从字节高位到低位读取,如需低位优先可将7 - bitOffset改为bitOffset
        int bit = (buffer[byteIndex] >> (7 - bitOffset)) & 1;
        bitOffset++;
        if (bitOffset == 8) {
            bitOffset = 0;
            byteIndex++;
        }
        return bit;
    }
}

使用示例

完全匹配你给出的伪代码调用逻辑:

byte[] byteArray = // 你的字节数组初始化逻辑
BitStream bitstream = new BitStream(byteArray);

// 写法1:通过hasNext判断
while (bitstream.hasNext()) {
    int currentBit = bitstream.read();
    // 逐位处理逻辑
}

// 写法2:通过read返回值判断
int currentBit;
while ((currentBit = bitstream.read()) != -1) {
    // 逐位处理逻辑
}

若需要从字节的低位开始读取比特,仅需修改read方法中比特计算逻辑的偏移参数即可。

内容的提问来源于stack exchange,提问作者Kristina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:57:04