1 Star 0 Fork 0

竹蜻蜓 / skymeta

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
codec.go 878 Bytes
一键复制 编辑 原始数据 按行查看 历史
竹蜻蜓 提交于 2022-04-27 16:27 . network part and logger optimize
package network
import (
"bytes"
"encoding/binary"
"io"
"sync"
)
var headerSize = 4
var headerBufPool = &sync.Pool{
New: func() any {
v := make([]byte, headerSize)
return &v
},
}
type defaultCodec struct{}
func (codec *defaultCodec) Pack(payload []byte, buf *bytes.Buffer) (err error) {
headerBuf := headerBufPool.Get().(*[]byte)
defer headerBufPool.Put(headerBuf)
binary.BigEndian.PutUint32(*headerBuf, uint32(len(payload)))
buf.Write(*headerBuf)
buf.Write(payload)
return
}
func (codec *defaultCodec) Unpack(reader io.Reader) (payload []byte, err error) {
headerBuf := headerBufPool.Get().(*[]byte)
defer headerBufPool.Put(headerBuf)
_, err = io.ReadAtLeast(reader, *headerBuf, headerSize)
if err != nil {
return
}
length := binary.BigEndian.Uint32(*headerBuf)
payload = make([]byte, length)
_, err = io.ReadFull(reader, payload)
return
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/doraemon1996/skymeta.git
git@gitee.com:doraemon1996/skymeta.git
doraemon1996
skymeta
skymeta
v0.0.2

搜索帮助

344bd9b3 5694891 D2dac590 5694891