From e83dec5ffe35bca0db2efd76f362aa9350701fc6 Mon Sep 17 00:00:00 2001 From: 1 <1@72wo.cn> Date: Fri, 20 Jun 2025 20:07:34 +0000 Subject: [PATCH] 1 --- common/bytearray/bytearray.go | 20 +++++++++++++++----- common/bytearray/bytearray_test.go | 21 +++++++++++++++++++++ 2 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 common/bytearray/bytearray_test.go diff --git a/common/bytearray/bytearray.go b/common/bytearray/bytearray.go index 897b39b87..982438636 100644 --- a/common/bytearray/bytearray.go +++ b/common/bytearray/bytearray.go @@ -27,15 +27,24 @@ var bufferpool = &sync.Pool{ } // CreateByteArray 创建一个新的ByteArray实例,使用指定的字节数组 -func CreateByteArray(bytes []byte) *ByteArray { - ba := bufferpool.Get().(*ByteArray) - ba.buf = bytes +func CreateByteArray(bytes ...[]byte) *ByteArray { + var ba *ByteArray + if len(bytes) == 0 {//如果是0,则为新创建 + ba = bufferpool.Get().(*ByteArray) + }else{//读序列 + ba =&ByteArray{endian: defaultEndian} + } + + for _, num := range bytes { + ba.buf=append(ba.buf, num...) + } + ba.ResetPos() return ba } -// ReleaseByteArray 将ByteArray实例放回池中以便重用 -func ReleaseByteArray(ba *ByteArray) { +// releaseByteArray 将ByteArray实例放回池中以便重用 +func releaseByteArray(ba *ByteArray) { ba.Reset() bufferpool.Put(ba) } @@ -131,6 +140,7 @@ func (ba *ByteArray) Reset() { // Bytes 返回完整的字节数组 func (ba *ByteArray) Bytes() []byte { + defer releaseByteArray(ba)//这里是写数组,写完后退出时释放线程池 return ba.buf } diff --git a/common/bytearray/bytearray_test.go b/common/bytearray/bytearray_test.go new file mode 100644 index 000000000..54bf4fb3f --- /dev/null +++ b/common/bytearray/bytearray_test.go @@ -0,0 +1,21 @@ +package bytearray + +import ( + "testing" +) + +func BenchmarkByteArray(b *testing.B) { + b.ReportAllocs() + //写入 +testbyte:=CreateByteArray() +for i := 0; i < b.N; i++ { + testbyte.writeNumber(42) + testbyte.writeNumber(12345.4) + testbyte.writeNumber(123456789) + testbyte.writeNumber(1234567890123456789) + testbyte.WriteString("test string") + testbyte.Bytes() +} + + +}