From ef710b81c14aa644747c0bf834f07b3c59ec77de Mon Sep 17 00:00:00 2001 From: albertlockett Date: Thu, 7 Mar 2024 16:44:36 +0000 Subject: [PATCH] optimize handleArray fo char arrays --- pkg/decoder/decoder.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkg/decoder/decoder.go b/pkg/decoder/decoder.go index 795b0ac..440f913 100644 --- a/pkg/decoder/decoder.go +++ b/pkg/decoder/decoder.go @@ -150,6 +150,14 @@ func (d *decoder) handleArray( } length := int(typedMember.Nelems) slice := make([]byte, length) + + // avoid creating a new buffer for each slice if we can just use the raw data + if typInt.Size == 1 { + copy(slice, d.raw[d.offset:d.offset+uint32(length)]) + d.offset += uint32(length) + return string(slice), nil + } + for i := 0; i < length; i++ { buf := bytes.NewBuffer(d.raw[d.offset : d.offset+typInt.Size]) d.offset += typInt.Size