2011-02-26 14 views
10

के लिए अद्वितीय स्ट्रिंग बनाएं I छवि दर्शक के लिए एंड्रॉइड एप्लिकेशन कर रहा हूं। यह ऐप छवि डाउनलोड करेगा, और उन्हें एक कैश फ़ोल्डर में स्टोर करेगा।एंड्रॉइड: फ़ाइल नाम

तो, कैश फ़ोल्डर में, छवि फ़ाइल नाम अद्वितीय होना चाहिए। वर्तमान में, मैं फ़ाइल नाम उत्पन्न करने के लिए String.hashCode() का उपयोग करता हूं।

क्या अद्वितीय स्ट्रिंग प्राप्त करने के लिए कोई और बेहतर तरीका है?

उत्तर

13

java.util.UUID का उपयोग करें। randomUUID देखें जो एक तथाकथित Universally unique identifier उत्पन्न करता है।

मैं वास्तव में समझ नहीं पा रहा हूं कि आप String.hashCode के साथ "अद्वितीय" मान कैसे उत्पन्न करना चाहते हैं। आप हैशकोड को किस स्ट्रिंग पर कॉल करते हैं? हैशकोड का उद्देश्य अद्वितीय आईडी उत्पन्न नहीं करना है ... इसका मतलब स्ट्रिंग के लिए hash code उत्पन्न करना है, इसलिए यदि तार स्वयं अद्वितीय नहीं हैं, तो हैश कोड या तो नहीं होंगे।

+1

इसका उत्तर देने के लिए धन्यवाद। दरअसल, मैंने जो किया वह ऑनलाइन छवि को स्थानीय में स्टोर करना है। चूंकि प्रत्येक छवि में अद्वितीय यूआरएल होता है, इसलिए मैं फ़ाइल नाम उत्पन्न करने के लिए url.hashcode का उपयोग करता हूं। मुझे आश्चर्य है कि ऐसा करने के लिए हैशकोड का उपयोग करने के लिए कोई प्रदर्शन समस्या होगी या नहीं। इसलिए मैं सामान्य तरीके से जानना चाहता हूं कि आप कैसे कैश फ़ाइल को सहेजते हैं, और उन्हें अद्वितीय बनाते हैं। – James

+0

यह एक संपूर्ण यूआरएल के लिए एक अद्वितीय और विशिष्ट आईडी प्राप्त करने में सक्षम होने का पूरा उद्देश्य है। यदि आप यादृच्छिक यूयूआईडी बनाते हैं तो आपको यूआरएल और आईडी का नक्शा बनाए रखना होगा। लेकिन हैशकोड हमेशा एक विशेष आईडी के लिए एक ही आईडी वापस कर देगा। – Sileria

+3

स्ट्रिंग uuid = UUID.randomUUID()। ToString()। ReplaceAll ("-", ""); –

2

UUID.randomUUID() का उपयोग करने के लिए क्रिसजे सुझाव एक अच्छा विकल्प है; कैश निर्देशिका में फ़ाइल नाम के रूप में प्राथमिक कुंजी का उपयोग कर

ID (PK) | original filename | original URL 

और उसके बाद: लेकिन मैं कैश एक डेटाबेस तालिका द्वारा समर्थित कराना पसंद करते हैं।

आप फ़ाइलों के बहुत सारे है की योजना है, की तरह एक निर्देशिका वृक्ष संरचना होने हैं: हेक्स के लिए प्राथमिक कुंजी परिवर्तित भी एक क्लीनर समाधान हो सकता है के बाद

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

, लेकिन आप एक बाईं गद्दी तय करना होगा फ़ाइल नामों के लिए, जो निर्देशिका वृक्ष गहराई का एक कार्य होगा और प्रति पत्ती निर्देशिका में फ़ाइलों की संख्या होगी।

+0

यह कार्यान्वित है। लेकिन मैं पहले से ही उन्हें अलग-अलग तरीके से कैशिंग कर रहा हूं। और स्थानीय रूप से स्थानीय रूप से संग्रहीत होने के बाद ही मैं फ़ाइल को कैश करता हूं। – James

संबंधित मुद्दे