2011-02-26 14 views
10

Estoy haciendo una aplicación de Android para el visor de imágenes. Esta aplicación descargará la imagen y la almacenará en una carpeta de caché.Android: Crear una cadena única para el nombre de archivo

Por lo tanto, en la carpeta de caché, el nombre del archivo de imagen debe ser único. Actualmente, uso String.hashCode() para generar el nombre del archivo.

¿Hay alguna otra forma mejor de obtener una cadena única?

Respuesta

13

Use java.util.UUID. Mira randomUUID que genera un llamado Universally unique identifier.

Realmente no entiendo cómo pretende generar un valor "único" con String.hashCode. ¿A qué cadena llamas hashCode? El propósito de hashCode no es generar identificadores únicos ... Se debe generar un hash code para una cadena, por lo que si las cadenas en sí mismas no son únicas, los códigos hash tampoco lo serán.

+1

Gracias por responderlo. En realidad, lo que hice fue almacenar la imagen en línea en el local. Como cada imagen tiene url única, utilizo url.hashcode para generar el nombre del archivo. Me pregunto si habrá un problema de rendimiento para usar hashcode para hacerlo. Así que quiero saber la forma más común de guardar el archivo de caché y hacerlo único. – James

+0

Ese es todo el propósito, para poder obtener una identificación única y específica para una url específica. Si crea un UUID aleatorio, deberá mantener un mapa de URL e ID. Pero hashcode siempre devolverá la misma identificación para una identificación en particular. – Sileria

+3

Cadena uuid = UUID.randomUUID(). ToString(). ReplaceAll ("-", ""); –

2

ChrisJ sugerencia de usar UUID.randomUUID() es una buena alternativa; pero preferiría tener la memoria caché respaldada por una tabla de base de datos:

ID (PK) | original filename | original URL 

y luego utilizando la clave principal como nombre de archivo en el directorio caché.

Si va a tener un montón de archivos, tiene una estructura de árbol de directorios como:

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

después de convertir la clave principal para hexagonal también podría ser una solución más limpia, pero usted tendrá que decidir un relleno a la izquierda para los nombres de archivo, que será una función de la profundidad del árbol del directorio y la cantidad de archivos por directorio de hojas.

+0

Es implementable. Pero ya los he almacenado en caché de otra manera. Y solo guardo en caché el archivo después de que fue almacenado en local por completo. – James

Cuestiones relacionadas