1
0
mirror of https://github.com/fumiama/go-base16384.git synced 2026-06-06 01:00:39 +08:00
Files
go-base16384/encoder.go
2023-04-19 15:33:33 +08:00

50 lines
781 B
Go

package base14
import (
"io"
)
type Encoder struct {
b []byte
r io.Reader
io.Reader
}
func NewEncoder(r io.Reader) *Encoder {
return &Encoder{r: r}
}
func NewBufferedEncoder(b []byte) *Encoder {
return &Encoder{b: b}
}
func (e *Encoder) Read(p []byte) (n int, err error) {
i := len(e.b)
if i == 0 && e.r == nil {
err = io.EOF
return
}
inlen := len(p) / 8 * 7
if e.r != nil {
e.b = append(e.b, make([]byte, inlen)...)
n, err = e.r.Read(e.b[i:])
inlen = i + n
if err != nil {
if len(e.b) > 0 {
n, _ = EncodeTo(e.b[:inlen], p)
}
e.b = nil
e.r = nil
return
}
n, err = EncodeTo(e.b[:inlen], p)
e.b = e.b[:0]
return
} else if inlen > len(e.b) {
inlen = len(e.b)
}
n, err = EncodeTo(e.b[:inlen], p)
e.b = e.b[inlen:]
return
}