我有10亿个体素的体素文件,每个体素都是真/假,并保存在一维布尔数组中。
将它复制到磁盘的好方法是什么,例如作为bytes / a 0100010101 ASCII文件,我可以快速高效地将文件读回内存?
目前我可以使用以下方式将文件写入磁盘:
savePath = System.IO.Directory.GetParent(Application.dataPath).ToString()+ "/Saved_Files" ;
var sw : System.IO.StreamWriter;
我不知道读取和写入1-2gb文件的最佳方法。
这就是我现在写的:
function saveBW(){
//var SW2 : System.IO.StreamWriter;
var timeString = DateTime.Now.ToString("HH-mm");
var fileNameFromFolder= Path.GetFileNameWithoutExtension(QPath[QDone]);
fileNameFromFolder = stripTrailingSlash(fileNameFromFolder);
PLYname = "MK5_aliased_" + fileNameFromFolder + "_"+ timeString + ".Bo0L" ;
var str ="";
var SW2 = new System.IO.StreamWriter(savePath + "/" + PLYname);
for( var tr = 0 ; tr < mesher.supernormous.Length ; tr++ )
{
str += mesher.supernormous ? 1 : 0;
if(tr%255==0)SW2.Write(str);
}
SW2.Write(str);
SW2.Flush();
SW2.Close();
}
答案 0 :(得分:5)
在.NET中,布尔运算符的大小并不大,因此它们不是您想要的数据类型的良好存储空间。相反,使用BitArray
- 它仍然为您提供所需的所有操作(读取单个位值,写入单个位值),并允许您在byte[]
中加载和存储整个数组(每字节最多8位)。这使得持久性非常简单:
var data = new BitArray(File.ReadAllBytes("MyFile.bin"));
当然,这实际上是多么有效率取决于分析。除非实际需要,否则您可能不想加载数据,因此某种寻呼解决方案可能会更好;但这超出了你的问题的范围。