[英]Is it possible to write a large array of struct directly to a binary file in c#?
我知道在 SO 上有很多类似的问题。 但他们都没有我想要的答案。
我需要将一个非常大的数组(大约 1 GiB 的存储空间)写入一个二进制文件。 它由非常简单的结构组成(结构只有 4 个只读字节成员)。
我可以在一个 go 中将该数组写入二进制文件/流而不将整个数组复制到字节数组中吗? 我绑定到 .NET 标准 2.0,所以没有 MemoryMarshal 的帮助。
干杯,乔治
这对你有帮助吗? 按指针复制
public static byte[] GetBytes<T>(T[] structAry) where T : struct
{
int len = (int)structAry.Length;
int size = Marshal.SizeOf(default(T));
byte[] arr = new byte[size * len];
IntPtr ptr = Marshal.AllocHGlobal(size);
try
{
for (int i = 0; i < len; ++i)
{
Marshal.StructureToPtr(structAry[i], ptr, true);
Marshal.Copy(ptr, arr, i * size, size);
}
}
catch (Exception e)
{
throw e;
}
finally
{
Marshal.FreeHGlobal(ptr);
}
return arr;
}
这取决于您的情况,我将概述一些情况,以便您选择最适合您情况的情况。
您无需将其复制到另一个数组中,您将能够将其写出。
您可以使用 [File.Copy][1] 来复制文件。
如果您的数据要从远程源中提取,或者您的数据由于某种原因需要在保存之前进行解析/修改,那么您需要将其加载到 memory 中,这是没有办法的。 但是,您可以使用以下算法加载较小的数据包,而不是一次加载整个数据包
while (packet <- packets.Next) do
initialize(packet)
save(packet)
finalize(packet)
while end
在此处查看更多信息: https://social.msdn.microsoft.com/Forums/vstudio/en-US/54eb346f-f979-49fb-aa2d-44dddad066bd/how-to-read-file-in-chunks-with-for- loop?forum=netfxbcl [1]: https://docs.microsoft.com/en-us/dotnet/api/system.io.file.copy?view=net-5.0
我不知道一种指向 memory 块的方法,您可以在不复制数据的情况下将其与File.Write...
一起使用。
我建议分块写:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.