在 C# 中将数据文件读入字节数组



我正在尝试将包含 16 位数字的大型数据文件读取到多维数组中,但我不确定 C# 中最快的方法。我还需要它来处理 8 位数字。在C++中,我使用了fread((,它非常快,可以将数据读取到"myArray[,,,,]"中,然后可以作为多维数组访问:

numberRead = fread( myArray, sizeof(short), 19531250, stream );

在 C# 中,我可以使用循环,但这非常慢。

using (BinaryReader reader = new BinaryReader(File.OpenRead(filepath)))
{
for (int i = 0; i < 25; i++)
for (int j = 0; j < 25; j++)
for (int k = 0; k < 25; k++)
for (int m = 0; m < 25; m++)
for (int n = 0; n < 25; n++)
{
myArray[i, j, k, m, n] = reader.ReadInt16();
}
}

有没有更快的方法将文件读入可以适应 8 位和 16 位数据的数组?

它很慢,因为您不断向文件系统请求小块数据。您最好先😉一次性将整个文件读入内存

using (var memStream = new MemoryStream(File.ReadAllBytes(filepath)))
using (BinaryReader reader = new BinaryReader(memStream))
{
for (int i = 0; i < 25; i++)
for (int j = 0; j < 25; j++)
for (int k = 0; k < 25; k++)
for (int m = 0; m < 25; m++)
for (int n = 0; n < 25; n++)
{
myArray[i, j, k, m, n] = reader.ReadInt16();
}
}

要读取有符号的 8 位整数,请将reader.ReadInt16()替换为reader.ReadSByte();

最新更新