【问题标题】:Uniqueness of gzip'ed stringsgzip 字符串的唯一性
【发布时间】:2014-09-29 20:22:52
【问题描述】:

这是我的压缩算法,取自 SO:

 var bytes = Encoding.Unicode.GetBytes(s);
 using (var msi = new MemoryStream(bytes))
 {
    using (var mso = new MemoryStream())
    {
       using (var gs = new GZipStream(mso, CompressionMode.Compress))
       {
          msi.CopyTo(gs);
       }
       return Convert.ToBase64String(mso.ToArray());
    }
 }

给定一组唯一的字符串,我可以完全确定输出的字符串也是唯一的吗?

【问题讨论】:

  • 我当然希望如此。如果 GZip 在其压缩算法中存在冲突,则很难保证在解压缩时恢复正确的数据。
  • 这就是我的感受……但我对压缩算法一无所知。

标签: c# string compression gzip unique


【解决方案1】:

是的。任何可逆算法的输出对于每个唯一输入都必须是唯一的。这样想:如果两个输入产生相同的输出,那么你怎么能解压缩它?

话虽如此:您是否尝试将其用作哈希数据的一种方式?如果是这样,这可能是一种非常低效的方法。如果您没有真正压缩数据,请不要使用压缩算法。你想做什么?

【讨论】:

  • 我有一堆 json 对象,它们是检索特定数据集的参数。我正在考虑使用 json 作为缓存数据的键。我不确定是否值得压缩密钥。
  • 啊,我明白了。因此,您需要密钥进行查找,但 JSON 似乎非常大,无法用作密钥。我的猜测是压缩 JSON 然后将其转换为 Base64 会比直接使用 JSON 作为哈希表的键要慢。可能在压缩方法上投入太多时间之前尝试一下。祝你好运!
猜你喜欢
  • 2021-08-29
  • 2015-09-09
  • 2022-01-11
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多