62 lines
1.8 KiB
Markdown
62 lines
1.8 KiB
Markdown
|
BStream: A Bit Stream helper in Golang
|
||
|
==================
|
||
|
|
||
|
[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/kkdai/bloomfilter/master/LICENSE) [![GoDoc](https://godoc.org/github.com/kkdai/bstream?status.svg)](https://godoc.org/github.com/kkdai/bstream) [![Build Status](https://travis-ci.org/kkdai/bstream.svg?branch=master)](https://travis-ci.org/kkdai/bstream)[![](https://goreportcard.com/badge/github.com/kkdai/bstream)
|
||
|
](https://goreportcard.com/report/github.com/kkdai/bstream)
|
||
|
|
||
|
|
||
|
|
||
|
Install
|
||
|
---------------
|
||
|
`go get github.com/kkdai/bstream`
|
||
|
|
||
|
|
||
|
Usage
|
||
|
---------------
|
||
|
|
||
|
```go
|
||
|
//New a bit stream writer with default 5 byte
|
||
|
b := NewBStreamWriter(5)
|
||
|
|
||
|
//Write 0xa0a0 into bstream
|
||
|
b.WriteBits(0xa0a0, 16)
|
||
|
|
||
|
//Read 4 bit out
|
||
|
result, err := b.ReadBits(4)
|
||
|
if err != nil {
|
||
|
log.Printf("result:%x", result)
|
||
|
//result:a
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Notes
|
||
|
---------------
|
||
|
|
||
|
- BStream is *not* thread safe. When you need to use it from different goroutines, you need to manage locking yourself.
|
||
|
- You can use the same `*BStream` object for reading & writing. However note that currently it is possible to read zero-value data if you read more bits than what has been written.
|
||
|
- BStream will *not* modify the data provided to `NewBStreamReader`. You can reuse the same `*BStream` object for writing and it will allocate a new underlying buffer.
|
||
|
|
||
|
Inspired
|
||
|
---------------
|
||
|
|
||
|
- [https://github.com/dgryski/go-tsz](https://github.com/dgryski/go-tsz)
|
||
|
|
||
|
Benchmark
|
||
|
---------------
|
||
|
```
|
||
|
BenchmarkWriteBits-4 100000000 15.3 ns/op
|
||
|
BenchmarkReadBits-4 50000000 26.5 ns/op
|
||
|
```
|
||
|
|
||
|
Project52
|
||
|
---------------
|
||
|
|
||
|
It is one of my [project 52](https://github.com/kkdai/project52).
|
||
|
|
||
|
|
||
|
License
|
||
|
---------------
|
||
|
|
||
|
This package is licensed under MIT license. See LICENSE for details.
|
||
|
|