bitCount 만큼 bit 들을 추출합니다. 결과는 Uint32 크기를 가진 정수입니다. 이는 C++ 과 달리 JS 는 >> 연산자가 32-bit 정수에만 정의되기 때문입니다. 만약 a >> 40 처럼 하게 되면, 우측 피연산자 40 은 $32$ 로 나눈 나머지가 되어 a >> 8 이라는 잘못된 결과가 나오게 됩니다.

주소값을 매길 수 있는 최소 단위는 $byte$ 이므로, 1-bit 를 읽기 위해서는 1-byte 를 읽고 비트 연산자를 통해 사용하지 않을 7-bits 는 걸러내야 합니다. 이때 읽지 않은 bit 들은 내부 버퍼에 버퍼링(buffering)됩니다.

BitStream 은 항상 최소한의 바이트들을 읽어, zlib-data stream 을 읽은 이후의 작업에 영향을 미치지 않도록 합니다. 예를 들어 현재 버퍼링된 bit 들이 없는 상태에서 12-bits 를 읽어야 한다면, FileStream 으로부터 항상 2-byte 를 읽어온다는 의미입니다.

PNG 파일을 읽기 위해 생성자 BitStream()idatChunk 인자를 전달했다면, IDAT 청크들의 경계를 자동으로 처리해줍니다.

Syntax

bin.read(bitCount)

Parameters

bitCount

추출할 bit 들의 갯수를 나타내는 number . 내부 버퍼의 크기는 $32$ 가 최대이므로, 항상 bitCount 의 범위는 $[0, 32]$ 이어야 합니다.

Return value

읽어들인 bits 들이 담긴 number . 항상 32-bit unsigend integer 를 나타냅니다.

Example

// uint8Array 
//      0        1        2
// +--------+--------+--------+
// |11101111|11100001|      01|
// +--------+--------+--------+
//

const uint8Array = new Uint8Array([0xef, 0xe1, 0x01]); 
const bin        = new BitStream(new FileStream(uint8Array));

const result0 = bin.read(5);  // 0xf
const result1 = bin.read(13); // 0x0f0f

console.log(result0.toString(16), result1.toString(16)); // f f0f