【问题标题】:Android: Create unique string for file nameAndroid:为文件名创建唯一字符串
【发布时间】:2011-07-04 20:04:19
【问题描述】:

我正在为图像查看器做一个 android 应用程序。此应用程序将下载图像,并将它们存储在缓存文件夹中。

所以,在缓存文件夹中,图片文件名必须是唯一的。目前,我使用 String.hashCode() 来生成文件名。

还有其他更好的方法来获取唯一字符串吗?

【问题讨论】:

    标签: android random


    【解决方案1】:

    使用java.util.UUID。查看randomUUID,它生成了一个所谓的Universally unique identifier

    我真的不明白您打算如何使用 String.hashCode 生成“唯一”值。你在什么字符串上调用 hashCode? hashCode 的目的不是生成唯一的 ID...它的目的是为字符串生成 hash code,因此如果字符串本身不是唯一的,则哈希码也不会是唯一的。

    【讨论】:

    • 感谢您的回答。实际上,我所做的是将在线图像存储到本地。因为每张图片都有唯一的 url,所以我使用 url.hashcode 来生成文件名。我只是想知道使用哈希码是否会出现性能问题。所以我想知道如何保存缓存文件的常用方法,并使它们独一无二。
    • 这就是全部目的,能够为特定的 url 获取唯一且特定的 ID。如果您创建随机 UUID,那么您将必须维护 url 和 ID 的映射。但是对于特定的 id,hashcode 总是会返回相同的 id。
    • String uuid = UUID.randomUUID().toString().replaceAll("-", "");
    【解决方案2】:

    使用java.util.UUID

      String uniqueString = UUID.randomUUID().toString();
    

    【讨论】:

      【解决方案3】:

      ChrisJ 建议使用 UUID.randomUUID() 是一个不错的选择;但我更希望缓存由数据库表备份:

      ID (PK) | original filename | original URL
      

      然后使用主键作为缓存目录中的文件名。

      如果您打算拥有大量文件,则具有如下目录树结构:

      0 
      +--- 0
           +---- 01.jpg
           +---- 02.jpg
           +---- ...
           +---- 0f.jpg
      +--- 1
           +---- 10.jpg
           +---- ...
           +---- cc.jpg
      

      将主键转换为十六进制后也可能是一个更简洁的解决方案,但您必须为文件名确定一个左填充,这将是目录树深度和每个叶目录的文件数的函数。

      【讨论】:

      • 它是可以实现的。但我已经以不同的方式缓存它们。而且我只在文件完全存储在本地后才缓存它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多