1
0
mirror of https://github.com/fumiama/go-base16384.git synced 2026-06-08 20:10:32 +08:00
This commit is contained in:
源文雨
2022-03-19 19:34:32 +08:00
parent 42e4c3cd4b
commit 851f9f8666
8 changed files with 418 additions and 50 deletions

49
encoder.go Normal file
View File

@@ -0,0 +1,49 @@
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
e.b = e.b[:inlen]
if err != nil {
if len(e.b) > 0 {
n = EncodeLen(inlen)
_ = EncodeTo(e.b[:inlen], p)
}
e.b = nil
e.r = nil
return
}
} else if inlen > len(e.b) {
inlen = len(e.b)
}
n = EncodeLen(inlen)
_ = EncodeTo(e.b[:inlen], p)
e.b = e.b[inlen:]
return
}