我无法保持数组的大小固定

时间:2014-09-23 18:36:43

标签: 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); //if bytes read =20 , size of MyPCMBuf becomes 20

发生了什么以及如何避免它?

5 个答案:

答案 0 :(得分:4)

那是因为ReadBytes返回一个新的字节数组。

如果要将字节读入现有数组,请调用Read

那是:

int bytesRead = reader.Read(myBuffer, 0, 160);

答案 1 :(得分:3)

你可以毫不费力地修复尺寸。

ReadBytes返回一个新数组。那么简单。旧的永远不会改变大小。

如果您想使用缓冲区,请使用其他方法,例如:

public virtual int Read(
    byte[] buffer,
    int index,
    int count
)

在那个班上。然后你保留你的阵列。

答案 2 :(得分:2)

根本不使用BinaryReader。使用FileStream返回的Open并调用其Read方法。如果您不指定MyPCMBuf,则其长度不可能发生变化。

无关:使用Array.Clear (MyPCMBuf,0,MyPCMBuf.Length);。减少冗余。错误的可能性较小。使用using。如果您始终覆盖它,请不要初始化MyPCMBuf。不要冗余地清除它。我在这看到很多误解。在编程方法上要更加严谨。您似乎并不了解您正在使用的所有语言功能和API。这很危险。

答案 3 :(得分:2)

您正在覆盖MyPCMBuf

MyPCMBuf = reader.ReadBytes(160);

因此,行MyPCMBuf = new byte[160];与您的代码无关。 你并没有真正按照自己的想法去做。

答案 4 :(得分:0)

reader.ReadBytes(160)将创建一个大小为160的新字节数组。它不会在您已有的数组中存储值。那个被发送到垃圾收集。