package xugu import ( "errors" "fmt" "net" "time" ) var ( ErrBusyBuffer = errors.New("busy buffer") ) type buffer struct { buf []byte // buf 是一个字节缓冲区,长度和容量相等。 conn net.Conn idx int length int timeout time.Duration } // newBuffer 分配并返回一个新的缓冲区。 func newBuffer(nc net.Conn) buffer { return buffer{ buf: make([]byte, 2048), conn: nc, } } // store 存储 buf,这是一个更新的缓冲区,如果合适的话。 func (b *buffer) store(buf []byte) error { if len(buf) > cap(b.buf) { fmt.Println("大于缓冲区: len(buf) > cap(b.buf)") return ErrBusyBuffer } b.buf = buf[:cap(buf)] return nil } func (b *buffer) peekChar() byte { ret := b.buf[b.idx] // fmt.Println("peekChar内部的: ", b.buf[b.idx:]) return ret } // 返回指定字节的切片 func (b *buffer) readNext(need int, reverse bool) []byte { //长度不够返回 if len(b.buf[b.idx:]) < need { //调用一次接收服务器消息 b.conn.Read(b.buf[b.idx:]) offset := b.idx b.idx += need return b.buf[offset:b.idx] } offset := b.idx b.idx += need //fmt.Println("readNext: ", b.buf[offset:b.idx]) if reverse { // tmp2 := b.buf[offset:b.idx] //fmt.Println("readNext: 转换小端前", tmp2, " - ", string(tmp2)) tmp := reverseBytes(b.buf[offset:b.idx]) // fmt.Println("readNext: 转换小端后", tmp, " - ", string(tmp)) return tmp } else { // fmt.Println("readNext: 没有转换:", b.buf[offset:b.idx]) // fmt.Println("readNext: 没有转换:", string(b.buf[offset:b.idx])) return b.buf[offset:b.idx] } }