2011-02-26 9 views
10

이미지 뷰어 용 안드로이드 응용 프로그램을 만들고 있습니다. 이 앱은 이미지를 다운로드하고 캐시 폴더에 저장합니다.Android : 파일 이름에 고유 한 문자열 만들기

따라서 캐시 폴더에서 이미지 파일 이름은 고유해야합니다. 현재 String.hashCode()를 사용하여 파일 이름을 생성합니다.

고유 한 문자열을 얻는 다른 더 좋은 방법이 있습니까?

답변

13

java.util.UUID을 사용하십시오. 소위 Universally unique identifier을 생성하는 randomUUID을보십시오.

String.hashCode를 사용하여 "고유 한"값을 생성하는 방법을 실제로 이해하지 못합니다. 어떤 문자열에서 hashCode를 호출합니까? hashCode의 목적은 고유 한 ID를 생성하는 것이 아닙니다. 문자열에 대해 hash code을 생성하기위한 것이므로 문자열 자체가 고유하지 않으면 해시 코드도 포함되지 않습니다.

+1

답변 해 주셔서 감사합니다. 사실, 내가 한 일은 로컬에 온라인 이미지를 저장하는 것입니다. 각 이미지마다 고유 한 URL이 있으므로 url.hashcode를 사용하여 파일 이름을 생성합니다. 해시 코드를 사용하여 성능 문제가 발생하는지 궁금합니다. 따라서 캐시 파일을 저장하는 일반적인 방법을 알고 고유하게 만들고 싶습니다. – James

+0

특정 URL에 대해 고유하고 고유 한 ID를 얻을 수 있다는 것이 전체 목적입니다. 랜덤 UUID를 만들면 URL과 ID의 맵을 유지해야합니다. 그러나 hashcode는 항상 특정 id에 대해 동일한 id를 반환합니다. – Sileria

+3

문자열 uuid = UUID.randomUUID(). toString(). replaceAll ("-", ""); –

2

ChrisJ가 UUID.randomUUID()를 사용하는 것이 좋습니다. 캐시를 데이터베이스 테이블로 백업하는 것을 선호합니다.

ID (PK) | original filename | original URL 

그런 다음 기본 키를 cache dir의 파일 이름으로 사용합니다. 또한 청소기 해결책이 될 수있다 진수에 기본 키를 변환 한 후

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

,하지만 당신은 왼쪽 패딩을 결정해야합니다

이 같은 디렉토리 트리 구조를 갖는 파일을 많이 가지고하려는 경우

파일 이름은 디렉토리 트리 깊이와 리프 디렉토리 당 파일 수의 함수가됩니다.

+0

구현 가능합니다. 하지만 이미 다른 방식으로 캐싱하고 있습니다. 그리고 파일을 로컬에 완전히 저장 한 후에 만 ​​캐시합니다. – James

관련 문제