如何缩小字符串,以后能够找到原始字符串

时间:2013-06-14 00:46:08

标签: c# string winforms compression mailto

我正在开发这款仍处于测试阶段的应用,因此我设置了一个日志记录系统。日志太长而无法在mailto网址中使用,因此我考虑缩小文本然后对其进行解密。 假设我有一个50行长的日志,这应该可以帮助我创建类似zef16z1e6f8的东西,然后有一个程序来使用它来查找日志的所有50行。 我想请注意,我不需要任何花哨的TripleDES加密或其他东西。

1 个答案:

答案 0 :(得分:1)

首先,我建议重新查看为什么不能只发送整个日志内容?除非您有大型日志(> 5MB),否则我建议只发送日志。如果你仍然想要采取一些缩小的策略,我会考虑两个。

如果您想要一个简单的引用字符串,可以在稍后阶段用于查找日志数据,您只需将某种标识符与数据相关联(例如,Eugene建议的GUID)。无论日志大小如何,这都具有恒定长度的优点。

或者你可以只压缩日志,这会稍微缩小数据(任何高达约90%,如Dan所提到的)。然而,这具有可变长度的缺点,并且对于非常大的日志可能仍然超过您的尺寸限制。如果你走这条路,你可以做这样的事情(未经测试):

private string GetCompressedString()
{
    byte[] byteArray = Encoding.UTF8.GetBytes("Some long log string");
    using (var ms = new MemoryStream())
    {
        using (var gz = new GZipStream(ms, CompressionMode.Compress, true))
        {
            ms.Write(byteArray, 0, byteArray.Length);
        }

        ms.Position = 0;

        var compressedBytes = new byte[ms.Length];
        ms.Read(compressedBytes, 0, compressedBytes.Length);

        return Convert.ToBase64String(compressedBytes);
    }
}