C# 我无法保持数组的大小不变
我无法保持数组的大小不变。我必须从文件中读取数据。当读取的字节数小于160时,数组C# 我无法保持数组的大小不变,c#,C#,我无法保持数组的大小不变。我必须从文件中读取数据。当读取的字节数小于160时,数组MyPCMBuf将更改为读取的字节大小 byte[] MyPCMBuf; MyPCMBuf = new byte[160]; BinaryReader reader = new BinaryReader(File.Open(fileNamein, FileMode.Open)) ; Array.Clear (MyPCMBuf,0,160); MyPCMBuf = reader.ReadBytes(160);
MyPCMBuf
将更改为读取的字节大小
byte[] MyPCMBuf;
MyPCMBuf = new byte[160];
BinaryReader reader = new BinaryReader(File.Open(fileNamein, FileMode.Open)) ;
Array.Clear (MyPCMBuf,0,160);
MyPCMBuf = reader.ReadBytes(160); //if bytes read =20 , size of MyPCMBuf becomes 20
发生了什么以及如何避免它?
reader.ReadBytes(160)
将创建一个最大为160的新字节数组。它不会在您已有的数组中存储值。那一个被发送到垃圾收集。根本不要使用二进制读取器。使用Open
返回的FileStream
并调用其Read
方法。如果不将其分配给MyPCMBuf
,则其长度不可能更改
无关:使用Array.Clear(MyPCMBuf,0,MyPCMBuf.Length)代码>。减少冗余。减少出错的可能性。使用使用。如果总是覆盖MyPCMBuf,请不要初始化它。不要多余地清除它。我在这里看到很多误解。在编程方法上要更加严格。您似乎并不真正了解所使用的所有语言功能和API。这很危险。您正在行中覆盖MyPCMBuf
MyPCMBuf = reader.ReadBytes(160);
因此,lineMyPCMBuf=新字节[160]代码>在代码中是不相关的。
你并不是真的在做你认为你在做的事。保持大小不变没有问题
ReadBytes
返回一个新数组。那很简单。旧的永远不会改变大小
如果要使用缓冲区,请使用其他方法,例如:
public virtual int Read(
byte[] buffer,
int index,
int count
)
在那门课上。然后保留数组。这是因为返回一个新的字节数组
如果要将字节读入现有数组,请调用
即:
int bytesRead = reader.Read(myBuffer, 0, 160);
当您执行MyPCMBuf=reader.ReadBytes(160)时;您正在将reader.ReadBytes(160)的返回结果分配给MyPCMBuf,如果只剩下20个字节,返回数组的长度将为20。您读取了吗?它明确表示返回值是“一个包含从底层流读取的数据的字节数组。如果到达流的末尾,该值可能小于请求的字节数。”大小写有什么问题?@user2711965可能与此问题有关。在不回头的情况下尽可能快地输入,当然也不会浪费时间在第一个代码格式上。@Pierre Luccinoult,yeah看起来就是这样。此外,他是唯一一个真正查看文档以找到正确方法的人。也需要时间。