Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,15 @@ func NewMyFrameCodec() StreamFrameCodec {

func (p *myFrameCodec) Encode(w io.Writer, framePayload FramePayload) error {
var f = framePayload
var totalLen int32 = int32(len(framePayload)) + 4
var totalLen int32 = int32(len(framePayload)) + 4 // 4对应Frame中totalLength的4个字节。总长度 = payload字节长度+totalLength的字节长度

// 先在frame中写上totalLength
err := binary.Write(w, binary.BigEndian, &totalLen)
if err != nil {
return err
}

// 再在frame中写上payload
n, err := w.Write([]byte(f)) // write the frame payload to outbound stream
if err != nil {
return err
Expand All @@ -55,13 +57,13 @@ func (p *myFrameCodec) Encode(w io.Writer, framePayload FramePayload) error {
}

func (p *myFrameCodec) Decode(r io.Reader) (FramePayload, error) {
var totalLen int32
err := binary.Read(r, binary.BigEndian, &totalLen)
var totalLen int32 // int32为4个字节,对应了frame中totalLength的4个字节
err := binary.Read(r, binary.BigEndian, &totalLen) // 先从frame中读出前面的4个字节,该4个字节为frame中的totalLength
if err != nil {
return nil, err
}

buf := make([]byte, totalLen-4)
buf := make([]byte, totalLen-4) // 再从frame中读出totalLength以后的剩下的字节,这些剩下的字节为payload
n, err := io.ReadFull(r, buf)
if err != nil {
return nil, err
Expand Down