C# 我无法保持数组的大小不变

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);

我无法保持数组的大小不变。我必须从文件中读取数据。当读取的字节数小于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);
因此,line
MyPCMBuf=新字节[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看起来就是这样。此外,他是唯一一个真正查看文档以找到正确方法的人。也需要时间。