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