Provides basic interfaces to read and traverse an io.Reader
as a stream of bits, rather than a stream of bytes.
$ go get github.com/32bitkid/bitreader
Ever wanted to count the number of 0 bits from the start of a file?
package main
import (
"os"
"fmt"
"github.com/32bitkid/bitreader"
)
func main() {
file, _ := os.Open("file")
r := bitreader.NewReader(file)
n := 0
for {
val, err := r.Read1()
if err != nil || val == true {
break
}
n += 1
}
fmt.Printf("The file starts with %d off bits", n)
}
But seriously, this is used for parsing densely packed binary formats where data may not be byte aligned. For example, decoding values packed with Huffman Coding.