如何将一组数字编码到文件中,以使文件的大小最小?

时间:2010-09-02 11:07:42

标签: .net

我必须在文件中编写一些算法的结果。结果是一个块列表,每个块由5个数字定义:3个整数和2个浮点数。在文件中编码它的最简单方法当然是纯文本,例如:

12 56 81 0.34 1.67 
124 11 76 0.75 6.11 
...

这也是考虑文件大小的最糟糕方式。

我怎样才能减小文件大小?如果这些都是整数,我只需将它们转换为字节,然后将它们作为字节写入文件,它会减小一些大小。但是花车更成问题。 有任何想法吗?在C#.NET中

3 个答案:

答案 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(' ');
  }
}