我见过here,还搜索了“marshal”几种将字节数组转换为结构的方法。
但我正在寻找的是,如果有一种方法可以一步从文件中读取一个结构数组(好的,无论是什么内存输入)?
我的意思是,从文件加载一个结构数组通常需要比IO时间更多的CPU时间(使用BinaryReader读取每个字段)。有没有解决方法?
我正在尝试尽快从文件加载大约400K结构。
由于
巴勃罗
答案 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 array 和 How to marshal an array of structs - (.Net/C# => C++)
我之前没有这样做过,自己也是C#.NET初学者。我希望这个解决方案有所帮助。