From 4314fdcb3963e7aa864bd0e878b0a02d9a4ff081 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Tue, 22 Mar 2022 21:34:05 +0800 Subject: [PATCH] binary: avoid alloc in reading integer --- binary/jce/reader.go | 25 ++++++++++--------------- binary/reader.go | 12 ++++++++---- client/model_show.go | 3 +-- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/binary/jce/reader.go b/binary/jce/reader.go index 9fd750d1..2c7cd45a 100644 --- a/binary/jce/reader.go +++ b/binary/jce/reader.go @@ -49,7 +49,7 @@ func (r *JceReader) skipHead() { } func (r *JceReader) skip(l int) { - r.skipBytes(l) + r.off += l } func (r *JceReader) skipField(t byte) { @@ -105,17 +105,6 @@ func (r *JceReader) readBytes(n int) []byte { return b } -func (r *JceReader) skipBytes(n int) { - if r.off+n > len(r.buf) { - panic("skipBytes: EOF") - } - lremain := len(r.buf[r.off:]) - if lremain < n { - n = lremain - } - r.off += n -} - func (r *JceReader) readByte() byte { if r.off >= len(r.buf) { panic("readByte: EOF") @@ -126,15 +115,21 @@ func (r *JceReader) readByte() byte { } func (r *JceReader) readUInt16() uint16 { - return goBinary.BigEndian.Uint16(r.readBytes(2)) + b := make([]byte, 2) + r.off += copy(b, r.buf[r.off:]) + return goBinary.BigEndian.Uint16(b) } func (r *JceReader) readUInt32() uint32 { - return goBinary.BigEndian.Uint32(r.readBytes(4)) + b := make([]byte, 4) + r.off += copy(b, r.buf[r.off:]) + return goBinary.BigEndian.Uint32(b) } func (r *JceReader) readUInt64() uint64 { - return goBinary.BigEndian.Uint64(r.readBytes(8)) + b := make([]byte, 8) + r.off += copy(b, r.buf[r.off:]) + return goBinary.BigEndian.Uint64(b) } func (r *JceReader) readFloat32() float32 { diff --git a/binary/reader.go b/binary/reader.go index f11c608f..3fcaa701 100644 --- a/binary/reader.go +++ b/binary/reader.go @@ -52,17 +52,20 @@ func (r *Reader) ReadBytesShort() []byte { } func (r *Reader) ReadUInt16() uint16 { - b := r.ReadBytes(2) + b := make([]byte, 2) + _, _ = r.buf.Read(b) return binary.BigEndian.Uint16(b) } func (r *Reader) ReadInt32() int32 { - b := r.ReadBytes(4) + b := make([]byte, 4) + _, _ = r.buf.Read(b) return int32(binary.BigEndian.Uint32(b)) } func (r *Reader) ReadInt64() int64 { - b := r.ReadBytes(8) + b := make([]byte, 8) + _, _ = r.buf.Read(b) return int64(binary.BigEndian.Uint64(b)) } @@ -154,7 +157,8 @@ func (r *NetworkReader) ReadBytes(len int) ([]byte, error) { } func (r *NetworkReader) ReadInt32() (int32, error) { - b, err := r.ReadBytes(4) + b := make([]byte, 4) + _, err := r.conn.Read(b) if err != nil { return 0, err } diff --git a/client/model_show.go b/client/model_show.go index 6b77a43b..c4160dd3 100644 --- a/client/model_show.go +++ b/client/model_show.go @@ -48,9 +48,8 @@ func (c *QQClient) getGtk(domain string) int { accu = accu + (accu << 5) + int(b) } return 2147483647 & accu - } else { - return 0 } + return 0 } func (c *QQClient) GetModelShow(modelName string) ([]*ModelVariant, error) {