From 53ac47950c19c7547ed6cc9b7b215a1b5ef5c5e5 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Tue, 17 Aug 2021 16:27:58 +0800 Subject: [PATCH] jce: optimize readByte. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit name old time/op new time/op delta JceReader_ReadSlice-8 271µs ± 2% 228µs ± 7% -15.97% (p=0.000 n=9+10) RequestDataVersion2_ReadFrom-8 4.57µs ± 6% 4.08µs ± 2% -10.74% (p=0.000 n=10+10) name old speed new speed delta JceReader_ReadSlice-8 77.6MB/s ± 2% 92.5MB/s ± 7% +19.14% (p=0.000 n=9+10) RequestDataVersion2_ReadFrom-8 20.4MB/s ± 6% 22.8MB/s ± 2% +11.92% (p=0.000 n=10+10) name old alloc/op new alloc/op delta JceReader_ReadSlice-8 73.4kB ± 0% 65.3kB ± 0% -10.96% (p=0.000 n=9+6) RequestDataVersion2_ReadFrom-8 2.64kB ± 0% 2.59kB ± 0% -1.93% (p=0.000 n=10+10) name old allocs/op new allocs/op delta JceReader_ReadSlice-8 6.02k ± 0% 3.01k ± 0% -49.96% (p=0.000 n=10+10) RequestDataVersion2_ReadFrom-8 67.0 ± 0% 46.0 ± 0% -31.34% (p=0.000 n=10+10) --- binary/jce/reader.go | 20 ++++++++++++-------- binary/jce/reader_test.go | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/binary/jce/reader.go b/binary/jce/reader.go index 7771a3bd..558cef0a 100644 --- a/binary/jce/reader.go +++ b/binary/jce/reader.go @@ -3,13 +3,13 @@ package jce import ( "bytes" goBinary "encoding/binary" + "io" "math" "reflect" ) type JceReader struct { - buf *bytes.Reader - data []byte + buf *bytes.Reader } type HeadData struct { @@ -19,7 +19,7 @@ type HeadData struct { func NewJceReader(data []byte) *JceReader { buf := bytes.NewReader(data) - return &JceReader{buf: buf, data: data} + return &JceReader{buf: buf} } func (r *JceReader) readHead() (hd HeadData, l int32) { @@ -34,10 +34,10 @@ func (r *JceReader) readHead() (hd HeadData, l int32) { return hd, 1 } -func (r *JceReader) peakHead() (HeadData, int32) { - offset := r.buf.Size() - int64(r.buf.Len()) - n := NewJceReader(r.data[offset:]) - return n.readHead() +func (r *JceReader) peakHead() (h HeadData, l int32) { + h, l = r.readHead() + _, _ = r.buf.Seek(int64(-l), io.SeekCurrent) + return } func (r *JceReader) skip(l int) { @@ -99,7 +99,11 @@ func (r *JceReader) readBytes(len int) []byte { } func (r *JceReader) readByte() byte { - return r.readBytes(1)[0] + b, err := r.buf.ReadByte() + if err != nil { + panic(err) + } + return b } func (r *JceReader) readUInt16() uint16 { diff --git a/binary/jce/reader_test.go b/binary/jce/reader_test.go index 0a687501..cebad57b 100644 --- a/binary/jce/reader_test.go +++ b/binary/jce/reader_test.go @@ -35,7 +35,7 @@ func BenchmarkJceReader_ReadSlice(b *testing.B) { src := w.Bytes() b.SetBytes(int64(len(src))) b.StartTimer() - var result = []BigDataIPInfo{} + result := make([]BigDataIPInfo, 0) for i := 0; i < b.N; i++ { r := NewJceReader(src) r.ReadSlice(&result, 1)