代码之家  ›  专栏  ›  技术社区  ›  Eric

在C#中,从二进制文件读/写数组内容的最佳方法是什么?

  •  2
  • Eric  · 技术社区  · 15 年前

    我想读写大的原始卷文件的内容(例如MRI扫描)。这些文件只是一个序列,例如32 x 32 x 32浮点,所以它们可以很好地映射到一维数组。我希望能够将二进制卷文件的内容读入1D数组,例如float或ushort(取决于二进制文件的数据类型),并类似地将数组导出回原始卷文件。

    使用C#的最佳方法是什么?用BinaryReader/BinaryWriter一次读/写一个元素?使用FileStream.Read将它们逐段读入字节数组,然后在数组之间执行System.Buffer.BlockCopy?写我自己的读者/作者?

    编辑:似乎无法使用>2GB阵列,但问题仍然在于更小的阵列(大约256MB)

    1 回复  |  直到 15 年前
        1
  •  3
  •   Jon Skeet    15 年前

    64位上的.NET4已经取消了,但我还没听说。

    编辑:根据 this article

    你真的必须一次把所有的数据都存储在内存里吗?你能一次处理一大块吗?

    BinaryReader.Read(byte[], int, int) BinaryReader.ReadBytes(int) Buffer.BlockCopy 要有效地从字节转换为浮点等,请注意,这将是endian敏感,然而。如果您想更稳定地转换(以便以后可以更改endianness,或者在big endian平台上运行),您可能需要调用 ReadFloat()

    您是否确信您在这方面的代码确实存在性能问题?这是值得做的最简单的事情,将工作,然后分析它,首先。。。