【发布时间】:2011-07-04 20:04:19
【问题描述】:
我正在为图像查看器做一个 android 应用程序。此应用程序将下载图像,并将它们存储在缓存文件夹中。
所以,在缓存文件夹中,图片文件名必须是唯一的。目前,我使用 String.hashCode() 来生成文件名。
还有其他更好的方法来获取唯一字符串吗?
【问题讨论】:
我正在为图像查看器做一个 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
将主键转换为十六进制后也可能是一个更简洁的解决方案,但您必须为文件名确定一个左填充,这将是目录树深度和每个叶目录的文件数的函数。
【讨论】: