我必须在文件中编写一些算法的结果。结果是一个块列表,每个块由5个数字定义:3个整数和2个浮点数。在文件中编码它的最简单方法当然是纯文本,例如:
12 56 81 0.34 1.67
124 11 76 0.75 6.11
...
这也是考虑文件大小的最糟糕方式。
我怎样才能减小文件大小?如果这些都是整数,我只需将它们转换为字节,然后将它们作为字节写入文件,它会减小一些大小。但是花车更成问题。 有任何想法吗?在C#.NET中
答案 0 :(得分:1)
是吗? “12”和“56”将以ASCII或UTF-8编码各占2个字节。 “124”将占用3个字节,每个项目大约有1个字节的分隔符。编写二进制int需要4个字节。类似的比较适用于浮点数/双打。这也是考虑文件大小的最糟糕方式。
因此,如果样本代表您的真实数据,Text就是一种简单紧凑的格式。灵活性是无价的。
答案 1 :(得分:0)
您始终可以使用SharpZipLib之类的zip库来压缩文件。
答案 2 :(得分:0)
二进制变量长度将是最紧凑的(即只存储11位数字,只需要11位),但这很快变得复杂,因为你需要对类型和长度进行编码。
如何在文本中存储,但压缩(例如GZipStream
),如果没有复杂的编码,这将删除几乎所有(压缩不完美)。
类似的东西:
using (var fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write))
using (var gz = new GZipStream(fs, CompressionMode.Compress))
using (var writer = new StreamWriter(gz)) {
foreach (var num in numbers) {
writer.Write(num);
writer.Write(' ');
}
}