如何高性能的组合[]byte?

admin87 · · 1975 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

现在在学习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("")) } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1975 次点击  
加入收藏 微博
2 回复  |  直到 2017-11-20 01:08:05
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传