将长字符串压缩为较短的字符串,使用Java是唯一的

时间:2018-02-13 05:52:48

标签: java string filenames compression

代码动态创建文件名,有时超过文件名指定的255个字符长度。因此需要在Java中将其裁剪为唯一的短长度字符串。 以下是限制:

  1. 缩短的字符串将用作文件名
  2. 从压缩文件名中取回原始文件名的反向机制也应该起作用
  3. 压缩/解压缩将在运行中完成。即,每次保存或检索文件时都应该这样做。
  4. 尝试过的方法:

    1. 使用UUID类生成唯一标识符。但它失败了上面的第二个条件 - 无法从UUID获取原始字符串
    2. Inflater / Deflater,Inflater / Deflater Streams,GZIP Streams - 压缩字符串包含许多不能用作文件名的垃圾字符。还不确定字符串的唯一性
    3. 请建议解决此问题的最佳方法

      更新:标记为重复的问题的解决方案提供的字符串具有不能用作文件名或比特流的字符。他们没有解决实际问题

1 个答案:

答案 0 :(得分:1)

所述问题无法解决。您需要能够将来自集合的任何符号序列压缩到来自同一集合的较小长度的符号序列,然后无损地解压缩它。由于存在比较短序列更长的序列,因此所有较长序列到较短序列的任何映射必须将至少两个较长序列映射到单个较小序列。然后就不可能知道哪个更长的序列是更小的序列,所以你不能无损地解压缩它。

你的问题可解决的唯一方法是,如果你以某种方式约束内容,因此可能的文件名数量小于或等于 n 255 ,其中 n 是文件名中允许的不同字符数。