manipulate bytes and bits in golang with ease
$ go get github.com/superwhiskers/crunch
MiniBuffer
performs on average more than twice as fast as bytes.Buffer
in both writing and reading
BenchmarkBufferWriteBytes-4 50000000 36.3 ns/op 0 B/op 0 allocs/op
BenchmarkBufferReadBytes-4 20000000 100 ns/op 0 B/op 0 allocs/op
BenchmarkBufferWriteU32LE-4 30000000 47.7 ns/op 0 B/op 0 allocs/op
BenchmarkBufferReadU32LE-4 10000000 170 ns/op 8 B/op 1 allocs/op
BenchmarkBufferReadBit-4 20000000 113 ns/op 0 B/op 0 allocs/op
BenchmarkBufferReadBits-4 5000000 253 ns/op 0 B/op 0 allocs/op
BenchmarkBufferSetBit-4 20000000 101 ns/op 0 B/op 0 allocs/op
BenchmarkBufferClearBit-4 20000000 99.6 ns/op 0 B/op 0 allocs/op
BenchmarkMiniBufferWriteBytes-4 200000000 6.71 ns/op 0 B/op 0 allocs/op
BenchmarkMiniBufferReadBytes-4 2000000000 1.48 ns/op 0 B/op 0 allocs/op
BenchmarkMiniBufferWriteU32LE-4 100000000 21.6 ns/op 0 B/op 0 allocs/op
BenchmarkMiniBufferReadU32LE-4 100000000 11.7 ns/op 0 B/op 0 allocs/op
BenchmarkMiniBufferReadBit-4 2000000000 1.71 ns/op 0 B/op 0 allocs/op
BenchmarkMiniBufferReadBits-4 100000000 14.4 ns/op 0 B/op 0 allocs/op
BenchmarkMiniBufferSetBit-4 500000000 3.05 ns/op 0 B/op 0 allocs/op
BenchmarkMiniBufferClearBit-4 500000000 3.16 ns/op 0 B/op 0 allocs/op
BenchmarkStdByteBufferWrite-4 50000000 23.6 ns/op 0 B/op 0 allocs/op
BenchmarkStdByteBufferRead-4 200000000 7.18 ns/op 0 B/op 0 allocs/op
package main
import (
"fmt"
"github.com/superwhiskers/crunch"
)
func main() {
// creates a new buffer with four zeroes
buf := crunch.NewBuffer([]byte{0x00, 0x00, 0x00, 0x00})
// write the byte `0x01` to the first offset, and move the offset forward one
buf.WriteByteNext(0x01)
// write the byte `0x01` to the second offset, and move the offset forward one
buf.WriteByteNext(0x01)
// seek the offset back one
buf.SeekByte(-1, true)
// write the bytes `0x02` and `0x03` to the second and third offsets, respectively
buf.WriteBytesNext([]byte{0x02, 0x03})
// write the byte `0x04` to offset `0x03`
buf.WriteByte(0x03, 0x04)
// output the buffer's contents to the console
fmt.Printf("%v\n", buf.Bytes())
}