前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#中byte[]字节数组复制的5种常用方法

C#中byte[]字节数组复制的5种常用方法

作者头像
郑子铭
发布2023-08-30 10:19:39
8170
发布2023-08-30 10:19:39
举报
文章被收录于专栏:DotNet NB && CloudNative

简单总结了5种字节数组的复制方法

1、for循环实现复制

较为原始的遍历写法,不太推荐

代码语言:javascript
复制
byte[] data = new byte[]{0,1,2,3,4,5,6,7,8,9};

byte[] data1 = new byte[data.length];

for(int i=0;i<data1.length;i++)
{
        data1[i] = data[i];
}
2、Arrary.Copy实现复制

在CLR处理机制中最灵活,最强大,可装箱,拆箱复制,可加宽CLR基元类型,可内部判断实现了IFarmattable接口的兼容转换,当然这种强大方式必然会带来一定的性能损失。还有个CopyTo也是一样的。

代码语言:javascript
复制
byte[] data = new byte[]{0,1,2,3,4,5,6,7,8,9};
byte[] data1 = new byte[data.length];
Array.Copy(data,data1,data.length);//源数据data,目标数据data1,复制长度data.length
3、Clone实现复制

Clone会创建新数组,分配内存,不宜用在需要保持高刷新率下的场景

代码语言:javascript
复制
 byte[] data = new byte[]{0,1,2,3,4,5,6,7,8,9};
 byte[] data1;
 data1 = (byte[])data .Clone()
4、Buffer.BlockCopy实现复制

则从本质上以字节为复制单位,这在底层语言C,C++的处理优势上,同理,效率之高可以理解。当然如果对性能要求不高,Copy足矣,毕竟在上千次复制下,三者基本没消耗多少时间。使用时可根据项目需求斟酌选择!

代码语言:javascript
复制
 byte[] srcArray = new byte[] { 0x01, 0x02, 0x03, 0x04 };
 byte[] dstArray = new byte[srcArray.Length];
 Buffer.BlockCopy(srcArray, 0, dstArray, 0, srcArray.Length);
 //源数据srcArray , 起始位置0,目标数组dstArray ,开始位置0,多少长度 srcArray.Length
5、Array.ConstrainedCopy 实现复制

对复制要求严格,只能是同类型或者源数组类型是目标类型的派生元素类型,不执行装箱,拆箱,向下转换。

代码语言:javascript
复制
 byte[] srcArray = new byte[] { 0x01, 0x02, 0x03, 0x04 };
 byte[] dstArray = new byte[srcArray.Length];
 Array.ConstrainedCopy(srcArray, 0, dstArray, 0, srcArray.Length);
 //源数据srcArray , 起始位置0,目标数组dstArray ,开始位置0,多少长度 srcArray.Length
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、for循环实现复制
  • 2、Arrary.Copy实现复制
  • 3、Clone实现复制
  • 4、Buffer.BlockCopy实现复制
  • 5、Array.ConstrainedCopy 实现复制
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档