2011-02-26 18 views
10

Resim görüntüleyici için bir android uygulaması yapıyorum. Bu uygulama resmi indirecek ve bir önbellek klasöründe saklayacaktır.Android: Dosya adı için benzersiz bir dize oluşturun

Bu nedenle, önbellek klasöründe görüntü dosyası adı benzersiz olmalıdır. Şu anda, dosya adını oluşturmak için String.hashCode() kullanıyorum.

Benzersiz bir dize almak için başka daha iyi yollar var mı?

cevap

13

java.util.UUID'u kullanın. Universally unique identifier diye adlandırılan randomUUID'a bakın.

Gerçekten String.hashCode ile “benzersiz” değer yaratmayı amaçlamaktadır anlamıyorum. HashCode'u hangi dizede çağırırsınız? hashCode'un amacı benzersiz kimlikler üretmek değil ... Bir dize için hash code üretmek anlamına geliyor, bu yüzden dizelerin kendileri benzersiz değilse, karma kodları da olmayacak.

+1

Cevabınız için teşekkür ederiz. Aslında, yaptığım şey çevrimiçi görüntüyü yerel olarak saklamak. Her resmin benzersiz URL'si olduğundan, dosya adını oluşturmak için url.hashcode kullanıyorum. Bunu yapmak için hashcode kullanmak için bir performans sorunu olup olmadığını merak ediyorum. Bu yüzden önbellek dosyasını nasıl kaydettiğinizi ve bunları benzersiz kıldığını bilmek istiyorum. – James

+0

Tüm amaç, belirli bir URL için benzersiz ve özel bir kimlik alabilmektir. Rastgele UUID oluşturursanız, bir URL'ler ve kimlikler haritası tutmanız gerekir. Ancak, hashcode her zaman belirli bir kimlik için aynı kimliği döndürecektir. – Sileria

+3

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

2

ChrisJ'ün UUID.randomUUID() kullanımı önerisi iyi bir alternatiftir; ama bir veritabanı tablo tarafından yedeklenmiş önbellek olmasını tercih ediyorum: o zaman

ID (PK) | original filename | original URL 

ve önbellek dir dosya adı olarak birincil anahtarı kullanarak. Ayrıca daha temiz bir çözüm olabilir Hex birincil anahtar değiştirdikten sonra

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

ancak sol dolguya karar vermek zorunda kalacak:

Eğer böyle bir dizin ağacı yapısına sahip, dosyaları çok var planlıyorsanız

dizin ağacı derinliğinin bir işlevi ve dosya dizini başına dosya sayısı olacak dosya adları için.

+0

Uygulanabilir. Ama zaten onları farklı şekilde önbelleğe aldım. Ve sadece dosyayı tamamen yerel olarak depolandıktan sonra önbelleğe aldım. – James

İlgili konular