如何从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
相关产品推荐
相关产品推荐

