首页 > 编程语言 >C#中byte[]字节数组复制的常用方法

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

时间:2022-11-22 09:22:47浏览次数:39  
标签:字节 C# srcArray dstArray 复制 new byte data

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

for循环实现复制

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

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];
}

Arrary.Copy实现复制

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

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

Clone实现复制

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

 byte[] data = new byte[]{0,1,2,3,4,5,6,7,8,9};
 byte[] data1;
 data1 = (byte[])data .Clone()

Buffer.BlockCopy实现复制

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

 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

Array.ConstrainedCopy 实现复制

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

 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

标签:字节,C#,srcArray,dstArray,复制,new,byte,data
From: https://www.cnblogs.com/chonglu/p/16914104.html

相关文章

  • docker启动错误
    很久没有启动docker了,想使用dockerps-a命令查看之前自己安装的容器,出现了报错CannotconnecttotheDockerdaemonatunix:///var/run/docker.sock.Isthedockerda......
  • Firedac连接EXCEL数据表
    可以将EXCEL表当做数据库连接,方法是使用ODBC进行连接。见下列语句:ifnotdlgOpen1.ExecutethenExit;con1.Connected:=False;con1.Params.Clear;con1.DriverN......
  • 重新认识下JVM级别的本地缓存框架Guava Cache——优秀从何而来
    大家好,又见面了。本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。不......
  • C#通过注册表获取电脑的可用COM串口列表
    C#获取串口列表//usingMicrosoft.Win32;publicvoidGetComList(){RegistryKeykeyCom=Registry.LocalMachine.OpenSubKey("Ha......
  • Spring MVC之Converter类型转换器
    SpringMVC框架的Converter<S,T>是一个可以将一种数据类型转换成另一种数据类型的接口,这里S表示源类型,T表示目标类型。开发者在实际应用中使用框架内置的类型转换器基......
  • Unity Shader 7 CG 语法
    1Cg语法基础如C++、C#和Java等高级语言一样,Cg语言也有自己的数据类型和关键字。掌握和理解这些关键字是写好Cg程序的基础。1.2、Cg的数据类型与关键字基本数据类型:Cg支......
  • 【2022.11.21】PVE创建基于LXC的Docker容器
    CT模板换源cp/usr/share/perl5/PVE/APLInfo.pm/usr/share/perl5/PVE/APLInfo.pm_backsed-i's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/p......
  • Delphi TIdTCPConnection.ReadFromStack - 使用套接字绑定从协议堆栈读取数据。
    DelphiTIdTCPConnection.ReadFromStack-使用套接字绑定从协议堆栈读取数据。functionTIdTCPConnection.ReadFromStack(constARaiseExceptionIfDisconnected:B......
  • Spring Security(2)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 前面已经把需要的环境准备好了,包括数据库和SQL语句,现在再来写代码。至于安装MySQL什么的就跳过去了,娘度子里面一大把。......
  • Public NOIP Round #4 (Div. 1, 提高)
    写了两个和std不一样的做法(雾,然后还拿了一个最优解。治病容易发现是线段覆盖问题,因此只要对每个线段离散以后数出只有它一个线段覆盖的段即可。时间复杂度\(O(\sumk\lo......