[英]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.