在C#中读取一组结构

时间:2009-02-11 08:00:20

标签: c#

我见过here,还搜索了“marshal”几种将字节数组转换为结构的方法。

但我正在寻找的是,如果有一种方法可以一步从文件中读取一个结构数组(好的,无论是什么内存输入)?

我的意思是,从文件加载一个结构数组通常需要比IO时间更多的CPU时间(使用BinaryReader读取每个字段)。有没有解决方法?

我正在尝试尽快从文件加载大约400K结构。

由于

巴勃罗

2 个答案:

答案 0 :(得分:1)

您可能会对以下网址感兴趣。

http://www.codeproject.com/KB/files/fastbinaryfileinput.aspx

或者我认为伪代码如下:

readbinarydata一次性转换回结构..

public struct YourStruct
{ 
    public int First;
    public long Second;
    public double Third;
}

static unsafe byte[] YourStructToBytes( YourStruct s[], int arrayLen )
{
    byte[] arr = new byte[ sizeof(YourStruct) * arrayLen ];
    fixed( byte* parr = arr )
    { 
        * ( (YourStruct * )parr) = s; 
    }
    return arr;
}

static unsafe YourStruct[] BytesToYourStruct( byte[] arr, int arrayLen )
{
    if( arr.Length < (sizeof(YourStruct)*arrayLen) )
        throw new ArgumentException();
    YourStruct s[];
    fixed( byte* parr = arr )
    { 
        s = * ((YourStruct * )parr); 
    }
    return s;
}

现在您可以一次性从文件中读取bytearray并使用BytesToYourStruct转换回结构

希望你能实现这个想法并检查......

答案 1 :(得分:0)

我在这个网站找到了一个潜在的解决方案 - http://www.eggheadcafe.com/software/aspnet/32846931/writingreading-an-array.aspx

它基本上说要像这样使用二进制格式化程序:

FileStream fs = new FileStream(“DataFile.dat”,FileMode.Create); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(fs,somestruct);

我还在此网站上发现了两个问题 - Reading a C/C++ data structure in C# from a byte arrayHow to marshal an array of structs - (.Net/C# => C++)

我之前没有这样做过,自己也是C#.NET初学者。我希望这个解决方案有所帮助。