【发布时间】:2011-11-08 15:39:10
【问题描述】:
我有一个文件缓存,文件从不同的 url 下载。我想用它们的 url 名称保存每个文件。不过这些名称可能很长,而且我在使用 FAT32 文件系统的设备上 - 所以在我用完实际磁盘空间之前,这些长名称已经占用了资源。
我正在寻找一种缩短文件名的方法,已经收到了对字符串进行哈希处理的建议。但我不确定哈希是否保证对于两个不同的字符串是唯一的。如果两个散列 url 得到相同的散列值,如果我不小心获取了错误的图像,那就太糟糕了。
谢谢
【问题讨论】:
-
我想你会在散列文件名时遇到麻烦:散列(恕我直言)可以产生重复的条目......
-
当您说“在我用完实际磁盘空间之前,长名称正在消耗资源”时,我有点怀疑。不知道为什么。但是存储不是很便宜吗?
-
@Marco,同意,哈希可以产生重复(“冲突”)。如果发生冲突,您应该创建一些冲突处理程序来尝试新的哈希......
-
哈希不能保证是唯一的——有些哈希(例如 md5 或 sha1)仅仅根据它们包含的空间有多大来获得它们的“唯一性”。但是它们可能根本不会更短;-)
-
@Marco, poplitea:散列可以产生冲突,但概率小到可以完全忽略。即使您使用的是 MD5(输出大小为 128 位),那么有十亿个条目,发生冲突的机会仍然小于 10^-18。
标签: java hash url-shortener