我正在为图像查看器做一个Android应用程序。此应用程序将下载图像,并将它们存储在缓存文件夹中。
因此,在缓存文件夹中,图像文件名必须是唯一的。目前,我使用String.hashCode()来生成文件名。
还有其他更好的方法可以获得独特的字符串吗?
答案 0 :(得分:15)
使用java.util.UUID。查看生成所谓randomUUID的Universally unique identifier。
我真的不明白你打算如何用String.hashCode生成一个“唯一”值。你在什么字符串上调用hashCode? hashCode的目的不是为了生成唯一的ID ......它的意思是为字符串生成hash code,所以如果字符串本身不是唯一的,那么哈希码也不是。
答案 1 :(得分:7)
String uniqueString = UUID.randomUUID().toString();
答案 2 :(得分:3)
ChrisJ建议使用UUID.randomUUID()是一个不错的选择;但我更喜欢用数据库表备份缓存:
ID (PK) | original filename | original URL
然后使用主键作为缓存目录中的文件名。
如果您打算拥有大量文件,请使用以下目录树结构:
0
+--- 0
+---- 01.jpg
+---- 02.jpg
+---- ...
+---- 0f.jpg
+--- 1
+---- 10.jpg
+---- ...
+---- cc.jpg
将主键转换为十六进制后的也可以是一个更干净的解决方案,但您必须为文件名决定左边距,这将是目录树深度和每个叶子目录的文件数的函数。 / p>