Documentation
¶
Overview ¶
Package bitio tries to mimic the standard library packages io and bytes but for bits.
- bitio.Buffer same as bytes.Buffer
- bitio.IOBitReadSeeker is a bitio.ReaderAtSeeker that reads from a io.ReadSeeker
- bitio.IOBitWriter a bitio.BitWriter that writes to a io.Writer, use Flush() to write possible zero padded unaligned byte
- bitio.IOReader is a io.Reader that reads bytes from a bitio.Reader, will zero pad unaligned byte at EOF
- bitio.IOReadSeeker is a io.ReadSeeker that reads from a bitio.ReadSeeker, will zero pad unaligned byte at EOF
- bitio.NewBitReader same as bytes.NewReader
- bitio.LimitReader same as io.LimitReader
- bitio.MultiReader same as io.MultiReader
- bitio.SectionReader same as io.SectionReader
- bitio.Copy* same as io.Copy*
- bitio.ReadFull same as io.ReadFull
TODO:
- bitio.IOBitReader bitio.Reader that reads from a io.Reader
- bitio.IOBitWriteSeeker bitio.BitWriteSeeker that writes to a io.WriteSeeker
- bitio.CopyN
- Speed up read by using a cache somehow ([]byte or just a uint64?)
Index ¶
- Variables
- func BitStringFromBytes(buf []byte, nBits int64) string
- func BitsByteCount(nBits int64) int64
- func BytesFromBitString(s string) ([]byte, int64)
- func Copy(dst Writer, src Reader) (n int64, err error)
- func CopyBuffer(dst Writer, src Reader, buf []byte) (n int64, err error)
- func Read64(buf []byte, firstBit int64, nBits int64) uint64
- func ReadAtFull(r ReaderAt, p []byte, nBits int64, bitOff int64) (int64, error)
- func ReadFull(r Reader, p []byte, nBits int64) (int64, error)
- func ReverseBytes64(nBits int, n uint64) uint64
- func Write64(v uint64, nBits int64, buf []byte, firstBit int64)
- type Buffer
- type IOBitReadSeeker
- func (r *IOBitReadSeeker) CloneReadAtSeeker() (ReadAtSeeker, error)
- func (r *IOBitReadSeeker) CloneReadSeeker() (ReadSeeker, error)
- func (r *IOBitReadSeeker) CloneReader() (Reader, error)
- func (r *IOBitReadSeeker) CloneReaderAtSeeker() (ReaderAtSeeker, error)
- func (r *IOBitReadSeeker) ReadBits(p []byte, nBits int64) (n int64, err error)
- func (r *IOBitReadSeeker) ReadBitsAt(p []byte, nBits int64, bitOffset int64) (int64, error)
- func (r *IOBitReadSeeker) SeekBits(bitOff int64, whence int) (int64, error)
- func (r *IOBitReadSeeker) Unwrap() any
- type IOBitWriter
- type IOReadSeeker
- type IOReader
- type LimitReader
- type MultiReader
- func (m *MultiReader) CloneReadAtSeeker() (ReadAtSeeker, error)
- func (m *MultiReader) CloneReadSeeker() (ReadSeeker, error)
- func (m *MultiReader) CloneReader() (Reader, error)
- func (m *MultiReader) CloneReaderAtSeeker() (ReaderAtSeeker, error)
- func (m *MultiReader) ReadBits(p []byte, nBits int64) (n int64, err error)
- func (m *MultiReader) ReadBitsAt(p []byte, nBits int64, bitOff int64) (n int64, err error)
- func (m *MultiReader) SeekBits(bitOff int64, whence int) (int64, error)
- type ReadAtSeeker
- type ReadAtSeekerCloner
- type ReadCloner
- type ReadSeeker
- type ReadSeekerCloner
- type Reader
- type ReaderAt
- type ReaderAtSeeker
- type ReaderAtSeekerCloner
- type SectionReader
- func (r *SectionReader) CloneReadSeeker() (ReadSeeker, error)
- func (r *SectionReader) CloneReader() (Reader, error)
- func (r *SectionReader) CloneReaderAtSeeker() (ReaderAtSeeker, error)
- func (r *SectionReader) CloneReaderSeeker() (ReadAtSeeker, error)
- func (r *SectionReader) ReadBits(p []byte, nBits int64) (n int64, err error)
- func (r *SectionReader) ReadBitsAt(p []byte, nBits int64, bitOff int64) (int64, error)
- func (r *SectionReader) SeekBits(bitOff int64, whence int) (int64, error)
- func (r *SectionReader) Unwrap() any
- type Seeker
- type Writer
Constants ¶
This section is empty.
Variables ¶
var ErrNegativeNBits = errors.New("negative number of bits")
ErrNegativeNBits means read tried to read negative number of bits
var ErrOffset = errors.New("invalid seek offset")
ErrOffset means seek positions is invalid
Functions ¶
func BitStringFromBytes ¶
BitStringFromBytes from string to []byte, ex: ([]byte{0x50}, 4) -> "0101"
func BitsByteCount ¶
BitsByteCount returns smallest amount of bytes to fit nBits bits.
func BytesFromBitString ¶
BytesFromBitString from []byte to bit string, ex: "0101" -> ([]byte{0x50}, 4)
func CopyBuffer ¶
CopyBuffer bits from src to dst using provided byte buffer. Similar to io.CopyBuffer.
func Read64 ¶
Read64 read nBits bits large unsigned integer from buf starting from firstBit. Integer is read most significant bit first.
func ReadAtFull ¶
ReadAtFull expects to read nBits from r at bitOff. Similar to io.ReadFull.
func ReverseBytes64 ¶ added in v0.0.5
ReverseBytes64 reverses the bytes part of the lowest nBits. Similar to bits.ReverseBytes64 but only rotates the lowest bytes and rest of bytes will be zero.
Types ¶
type Buffer ¶
type Buffer struct {
// contains filtered or unexported fields
}
Buffer is a bitio.Reader and bitio.Writer providing a bit buffer. Similar to bytes.Buffer.
type IOBitReadSeeker ¶ added in v0.0.5
type IOBitReadSeeker struct {
// contains filtered or unexported fields
}
IOBitReadSeeker is a bitio.ReadAtSeeker reading from a io.ReadSeeker.
func NewIOBitReadSeeker ¶ added in v0.0.5
func NewIOBitReadSeeker(rs io.ReadSeeker) *IOBitReadSeeker
NewIOBitReadSeeker returns a new bitio.IOBitReadSeeker
func (*IOBitReadSeeker) CloneReadAtSeeker ¶ added in v0.0.8
func (r *IOBitReadSeeker) CloneReadAtSeeker() (ReadAtSeeker, error)
func (*IOBitReadSeeker) CloneReadSeeker ¶ added in v0.0.8
func (r *IOBitReadSeeker) CloneReadSeeker() (ReadSeeker, error)
func (*IOBitReadSeeker) CloneReader ¶ added in v0.0.8
func (r *IOBitReadSeeker) CloneReader() (Reader, error)
func (*IOBitReadSeeker) CloneReaderAtSeeker ¶ added in v0.0.8
func (r *IOBitReadSeeker) CloneReaderAtSeeker() (ReaderAtSeeker, error)
func (*IOBitReadSeeker) ReadBits ¶ added in v0.0.5
func (r *IOBitReadSeeker) ReadBits(p []byte, nBits int64) (n int64, err error)
func (*IOBitReadSeeker) ReadBitsAt ¶ added in v0.0.5
func (*IOBitReadSeeker) SeekBits ¶ added in v0.0.5
func (r *IOBitReadSeeker) SeekBits(bitOff int64, whence int) (int64, error)
func (*IOBitReadSeeker) Unwrap ¶ added in v0.6.0
func (r *IOBitReadSeeker) Unwrap() any
type IOBitWriter ¶ added in v0.0.5
type IOBitWriter struct {
// contains filtered or unexported fields
}
IOBitWriter is a bitio.Writer that writes to a io.Writer. Use Flush to write possible unaligned byte zero bit padded.
func NewIOBitWriter ¶ added in v0.0.5
func NewIOBitWriter(w io.Writer) *IOBitWriter
NewIOBitWriter returns a new bitio.IOBitWriter.
func (*IOBitWriter) Flush ¶ added in v0.0.5
func (w *IOBitWriter) Flush() error
Flush write possible unaligned byte zero bit padded.
func (*IOBitWriter) Unwrap ¶ added in v0.6.0
func (w *IOBitWriter) Unwrap() any
type IOReadSeeker ¶ added in v0.0.5
type IOReadSeeker struct { IOReader // contains filtered or unexported fields }
IOReadSeeker is a io.ReadSeeker that reads from a bitio.ReadSeeker. Unaligned byte at EOF will be zero bit padded.
func NewIOReadSeeker ¶ added in v0.0.5
func NewIOReadSeeker(rs ReadSeeker) *IOReadSeeker
NewIOReadSeeker return a new bitio.IOReadSeeker.
func (*IOReadSeeker) Read ¶ added in v0.0.5
func (r *IOReadSeeker) Read(p []byte) (n int, err error)
func (*IOReadSeeker) Seek ¶ added in v0.0.5
func (r *IOReadSeeker) Seek(offset int64, whence int) (int64, error)
func (*IOReadSeeker) Unwrap ¶ added in v0.6.0
func (r *IOReadSeeker) Unwrap() any
type IOReader ¶ added in v0.0.5
type IOReader struct {
// contains filtered or unexported fields
}
IOReader is a io.Reader and io.ByteReader that reads from a bitio.Reader. Unaligned byte at EOF will be zero bit padded.
func NewIOReader ¶ added in v0.0.5
NewIOReader returns a new bitio.IOReader.
type LimitReader ¶ added in v0.0.5
type LimitReader struct {
// contains filtered or unexported fields
}
LimitReader is a bitio.Reader that reads a limited amount of bits from a bitio.Reader. Similar to bytes.LimitedReader.
func NewLimitReader ¶ added in v0.0.5
func NewLimitReader(r Reader, n int64) *LimitReader
NewLimitReader returns a new bitio.LimitReader.
func (*LimitReader) CloneReader ¶ added in v0.0.8
func (l *LimitReader) CloneReader() (Reader, error)
func (*LimitReader) ReadBits ¶ added in v0.0.5
func (l *LimitReader) ReadBits(p []byte, nBits int64) (n int64, err error)
func (*LimitReader) Unwrap ¶ added in v0.6.0
func (r *LimitReader) Unwrap() any
type MultiReader ¶ added in v0.0.5
type MultiReader struct {
// contains filtered or unexported fields
}
MultiReader is a bitio.ReaderAtSeeker concatinating multiple bitio.ReadAtSeeker:s. Similar to io.MultiReader.
func NewMultiReader ¶ added in v0.0.5
func NewMultiReader(rs ...ReadAtSeeker) (*MultiReader, error)
NewMultiReader returns a new bitio.MultiReader.
func (*MultiReader) CloneReadAtSeeker ¶ added in v0.0.8
func (m *MultiReader) CloneReadAtSeeker() (ReadAtSeeker, error)
func (*MultiReader) CloneReadSeeker ¶ added in v0.0.8
func (m *MultiReader) CloneReadSeeker() (ReadSeeker, error)
func (*MultiReader) CloneReader ¶ added in v0.0.8
func (m *MultiReader) CloneReader() (Reader, error)
func (*MultiReader) CloneReaderAtSeeker ¶ added in v0.0.8
func (m *MultiReader) CloneReaderAtSeeker() (ReaderAtSeeker, error)
func (*MultiReader) ReadBits ¶ added in v0.0.5
func (m *MultiReader) ReadBits(p []byte, nBits int64) (n int64, err error)
func (*MultiReader) ReadBitsAt ¶ added in v0.0.5
type ReadAtSeeker ¶ added in v0.0.5
ReadAtSeeker is bitio.ReaderAt and bitio.Seeker.
func CloneReadAtSeeker ¶ added in v0.0.8
func CloneReadAtSeeker(r ReadAtSeeker) (ReadAtSeeker, error)
CloneReadAtSeeker clones a bitio.ReadAtSeeker if possible, resetting read position to start
type ReadAtSeekerCloner ¶ added in v0.0.8
type ReadAtSeekerCloner interface {
CloneReadAtSeeker() (ReadAtSeeker, error)
}
ReadAtSeekerCloner is a cloneable bitio.ReadAtSeeker, resetting read position to start
type ReadCloner ¶ added in v0.0.8
ReadCloner is a cloneable bitio.Reader, resetting read position to start
type ReadSeeker ¶ added in v0.0.5
ReadSeeker is bitio.Reader and bitio.Seeker.
func CloneReadSeeker ¶ added in v0.0.8
func CloneReadSeeker(r ReadSeeker) (ReadSeeker, error)
CloneReadSeeker clones a bitio.ReadSeeker if possible, resetting read position to start
type ReadSeekerCloner ¶ added in v0.0.8
type ReadSeekerCloner interface {
CloneReadSeeker() (ReadSeeker, error)
}
ReadSeekerCloner is a cloneable bitio.ReadSeeker, resetting read position to start
type Reader ¶
Reader is something that reads bits. Similar to io.Reader.
func CloneReader ¶ added in v0.0.8
CloneReader clones a bitio.Reader if possible, resetting read position to start
type ReaderAt ¶ added in v0.0.5
ReaderAt is something that reads bits at an offset. Similar to io.ReaderAt.
type ReaderAtSeeker ¶ added in v0.0.5
ReaderAtSeeker is bitio.Reader, bitio.ReaderAt and bitio.Seeker
func CloneReaderAtSeeker ¶ added in v0.0.8
func CloneReaderAtSeeker(r ReadAtSeeker) (ReaderAtSeeker, error)
CloneReaderAtSeeker clones a bitio.ReadAtSeeker if possible, resetting read position to start
type ReaderAtSeekerCloner ¶ added in v0.0.8
type ReaderAtSeekerCloner interface {
CloneReaderAtSeeker() (ReaderAtSeeker, error)
}
CloneReaderAtSeeker is a cloneable bitio.ReaderAtSeeker, resetting read position to start
type SectionReader ¶ added in v0.0.5
type SectionReader struct {
// contains filtered or unexported fields
}
SectionReader is a bitio.BitReaderAtSeeker reading a section of a bitio.ReaderAt. Similar to io.SectionReader.
func NewBitReader ¶ added in v0.0.5
func NewBitReader(buf []byte, nBits int64) *SectionReader
NewBitReader reader reading nBits bits from a []byte. If nBits is -1 all bits will be used. Similar to bytes.NewReader.
func NewSectionReader ¶ added in v0.0.5
func NewSectionReader(r ReaderAt, bitOff int64, nBits int64) *SectionReader
NewSectionReader returns a new bitio.SectionReader.
func (*SectionReader) CloneReadSeeker ¶ added in v0.0.8
func (r *SectionReader) CloneReadSeeker() (ReadSeeker, error)
func (*SectionReader) CloneReader ¶ added in v0.0.8
func (r *SectionReader) CloneReader() (Reader, error)
func (*SectionReader) CloneReaderAtSeeker ¶ added in v0.0.8
func (r *SectionReader) CloneReaderAtSeeker() (ReaderAtSeeker, error)
func (*SectionReader) CloneReaderSeeker ¶ added in v0.0.8
func (r *SectionReader) CloneReaderSeeker() (ReadAtSeeker, error)
func (*SectionReader) ReadBits ¶ added in v0.0.5
func (r *SectionReader) ReadBits(p []byte, nBits int64) (n int64, err error)
func (*SectionReader) ReadBitsAt ¶ added in v0.0.5
func (*SectionReader) SeekBits ¶ added in v0.0.5
func (r *SectionReader) SeekBits(bitOff int64, whence int) (int64, error)
func (*SectionReader) Unwrap ¶ added in v0.6.0
func (r *SectionReader) Unwrap() any