现在在学习GOLANG 需要组合多个[]byte.
现在在使用bytes.buffer.Write的方法 。
想咨询一下有没有比这个性能更好的办法
谢谢
下面两个方法为数据包的拆分与组合,拆分的数据包定长,但内部记录有效数据长度。想用在SOCKET多任务传送数据上。
在测试时发现一个问题,
一个68M的文件,
在拆分时用50MS
但在组合时要用150MS
想求各位大神看看有没有更好的提高性能办法。
顺便问一下,如何发代码?????????
```go
//这个方法 是将一个大的数据,拆分多个小包,保存到MAP里。pKey为每个包的KEY。。
func CreatePacket(t int16,data []byte)([]byte,int){
pDL:=1024*512-32
length:=len(data)
//计算拆包总数
count:=int(length/pDL)
if length % pDL>0{
count++
}
bType:=Int16ToBytes(t)
taskID:=uuid.NewV4().Bytes()
bCount:=IntToBytes(count)
bVerify:=make([]byte,2,2)
for i:=0;i<count;i++{
bIndex:=IntToBytes(i)
sIndex:=i*pDL
eIndex:=sIndex+pDL
if i==count-1 {
eIndex=length
}
pData:=data[sIndex:eIndex]
dLength:=len(pData)
bSpace:=make([]byte,pDL-dLength,pDL-dLength)
bPacket:=BytesCombine(bType,IntToBytes(dLength),taskID,bCount,bIndex,bVerify,pData,bSpace)
pKey:=b64.StdEncoding.EncodeToString(BytesCombine(taskID,bCount,bIndex))
packetList.Add(pKey,bPacket)
}
return taskID,count
}
//这个为从MAP里取出数所包,组合到一起
func ParsePacket(taskID []byte,count int)([]byte){
bCount:=IntToBytes(count)
data:=new(bytes.Buffer)
for i:=0;i<count;i++{
bIndex:=IntToBytes(i)
pKey:=b64.StdEncoding.EncodeToString(BytesCombine(taskID,bCount,bIndex))
bPacket:=packetList.Dequeue(pKey)
dLength:=BytesToInt(bPacket[2:6])
pData:=bPacket[32:32+dLength]
data.Write(pData)
}
return data.Bytes()
}
//BytesCombine 多个[]byte数组合并成一个[]byte
func BytesCombine(pBytes ...[]byte) []byte {
return bytes.Join(pBytes, []byte(""))
}
```
有疑问加站长微信联系(非本文作者)