1
This commit is contained in:
@@ -27,15 +27,24 @@ var bufferpool = &sync.Pool{
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateByteArray 创建一个新的ByteArray实例,使用指定的字节数组
|
// CreateByteArray 创建一个新的ByteArray实例,使用指定的字节数组
|
||||||
func CreateByteArray(bytes []byte) *ByteArray {
|
func CreateByteArray(bytes ...[]byte) *ByteArray {
|
||||||
ba := bufferpool.Get().(*ByteArray)
|
var ba *ByteArray
|
||||||
ba.buf = bytes
|
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()
|
ba.ResetPos()
|
||||||
return ba
|
return ba
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReleaseByteArray 将ByteArray实例放回池中以便重用
|
// releaseByteArray 将ByteArray实例放回池中以便重用
|
||||||
func ReleaseByteArray(ba *ByteArray) {
|
func releaseByteArray(ba *ByteArray) {
|
||||||
ba.Reset()
|
ba.Reset()
|
||||||
bufferpool.Put(ba)
|
bufferpool.Put(ba)
|
||||||
}
|
}
|
||||||
@@ -131,6 +140,7 @@ func (ba *ByteArray) Reset() {
|
|||||||
|
|
||||||
// Bytes 返回完整的字节数组
|
// Bytes 返回完整的字节数组
|
||||||
func (ba *ByteArray) Bytes() []byte {
|
func (ba *ByteArray) Bytes() []byte {
|
||||||
|
defer releaseByteArray(ba)//这里是写数组,写完后退出时释放线程池
|
||||||
return ba.buf
|
return ba.buf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
21
common/bytearray/bytearray_test.go
Normal file
21
common/bytearray/bytearray_test.go
Normal file
@@ -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()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user