mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 19:17:38 +08:00
jce: optimize readByte.
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)
This commit is contained in:
parent
0ca0c6ea45
commit
53ac47950c
@ -3,13 +3,13 @@ package jce
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
goBinary "encoding/binary"
|
goBinary "encoding/binary"
|
||||||
|
"io"
|
||||||
"math"
|
"math"
|
||||||
"reflect"
|
"reflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
type JceReader struct {
|
type JceReader struct {
|
||||||
buf *bytes.Reader
|
buf *bytes.Reader
|
||||||
data []byte
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type HeadData struct {
|
type HeadData struct {
|
||||||
@ -19,7 +19,7 @@ type HeadData struct {
|
|||||||
|
|
||||||
func NewJceReader(data []byte) *JceReader {
|
func NewJceReader(data []byte) *JceReader {
|
||||||
buf := bytes.NewReader(data)
|
buf := bytes.NewReader(data)
|
||||||
return &JceReader{buf: buf, data: data}
|
return &JceReader{buf: buf}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *JceReader) readHead() (hd HeadData, l int32) {
|
func (r *JceReader) readHead() (hd HeadData, l int32) {
|
||||||
@ -34,10 +34,10 @@ func (r *JceReader) readHead() (hd HeadData, l int32) {
|
|||||||
return hd, 1
|
return hd, 1
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *JceReader) peakHead() (HeadData, int32) {
|
func (r *JceReader) peakHead() (h HeadData, l int32) {
|
||||||
offset := r.buf.Size() - int64(r.buf.Len())
|
h, l = r.readHead()
|
||||||
n := NewJceReader(r.data[offset:])
|
_, _ = r.buf.Seek(int64(-l), io.SeekCurrent)
|
||||||
return n.readHead()
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *JceReader) skip(l int) {
|
func (r *JceReader) skip(l int) {
|
||||||
@ -99,7 +99,11 @@ func (r *JceReader) readBytes(len int) []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *JceReader) readByte() 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 {
|
func (r *JceReader) readUInt16() uint16 {
|
||||||
|
@ -35,7 +35,7 @@ func BenchmarkJceReader_ReadSlice(b *testing.B) {
|
|||||||
src := w.Bytes()
|
src := w.Bytes()
|
||||||
b.SetBytes(int64(len(src)))
|
b.SetBytes(int64(len(src)))
|
||||||
b.StartTimer()
|
b.StartTimer()
|
||||||
var result = []BigDataIPInfo{}
|
result := make([]BigDataIPInfo, 0)
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
r := NewJceReader(src)
|
r := NewJceReader(src)
|
||||||
r.ReadSlice(&result, 1)
|
r.ReadSlice(&result, 1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user