Skip to content

Commit 0c99635

Browse files
authored
Merge pull request #236 from sxci/sha_record_file_name
Sha record file name
2 parents 3b30dab + 0755579 commit 0c99635

File tree

2 files changed

+41
-5
lines changed

2 files changed

+41
-5
lines changed

library/src/androidTest/java/com/qiniu/android/TestFileRecorder.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import java.io.File;
2222
import java.io.IOException;
23+
import java.security.MessageDigest;
2324
import java.util.Date;
2425
import java.util.HashMap;
2526
import java.util.Map;
@@ -171,7 +172,7 @@ public void testLastModify() throws IOException {
171172
fr.set(key, data);
172173
byte[] data2 = fr.get(key);
173174

174-
File recoderFile = new File(folder, UrlSafeBase64.encodeToString(key));
175+
File recoderFile = new File(folder, hash(key));
175176

176177
long m1 = recoderFile.lastModified();
177178

@@ -183,10 +184,12 @@ public void testLastModify() throws IOException {
183184
assertEquals(3, data2.length);
184185
assertEquals('8', data2[1]);
185186

187+
// 让记录文件过期,两天
186188
recoderFile.setLastModified(new Date().getTime() - 1000 * 3600 * 48 - 2300);
187189

188190
long m2 = recoderFile.lastModified();
189191

192+
// 过期后,记录数据作废
190193
byte[] data3 = fr.get(key);
191194

192195
assertNull(data3);
@@ -201,4 +204,21 @@ public void testLastModify() throws IOException {
201204
long m4 = recoderFile.lastModified();
202205
assertTrue(m4 > m1);
203206
}
207+
208+
// copy from FileRecorder.
209+
private static String hash(String base) {
210+
try {
211+
MessageDigest digest = MessageDigest.getInstance("SHA-1");
212+
byte[] hash = digest.digest(base.getBytes());
213+
StringBuffer hexString = new StringBuffer();
214+
215+
for (int i = 0; i < hash.length; i++) {
216+
hexString.append(Integer.toString((hash[i] & 0xff) + 0x100, 16).substring(1));
217+
}
218+
return hexString.toString();
219+
} catch (Exception ex) {
220+
ex.printStackTrace();
221+
}
222+
return null;
223+
}
204224
}

library/src/main/java/com/qiniu/android/storage/persistent/FileRecorder.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.qiniu.android.storage.persistent;
22

33
import com.qiniu.android.storage.Recorder;
4-
import com.qiniu.android.utils.UrlSafeBase64;
54

65
import java.io.File;
76
import java.io.FileInputStream;
87
import java.io.FileOutputStream;
98
import java.io.IOException;
9+
import java.security.MessageDigest;
1010
import java.util.Date;
1111

1212
/**
@@ -39,7 +39,7 @@ public FileRecorder(String directory) throws IOException {
3939
*/
4040
@Override
4141
public void set(String key, byte[] data) {
42-
File f = new File(directory, UrlSafeBase64.encodeToString(key));
42+
File f = new File(directory, hash(key));
4343
FileOutputStream fo = null;
4444
try {
4545
fo = new FileOutputStream(f);
@@ -63,7 +63,7 @@ public void set(String key, byte[] data) {
6363
*/
6464
@Override
6565
public byte[] get(String key) {
66-
File f = new File(directory, UrlSafeBase64.encodeToString(key));
66+
File f = new File(directory, hash(key));
6767
FileInputStream fi = null;
6868
byte[] data = null;
6969
int read = 0;
@@ -102,7 +102,23 @@ private boolean outOfDate(File f) {
102102
*/
103103
@Override
104104
public void del(String key) {
105-
File f = new File(directory, UrlSafeBase64.encodeToString(key));
105+
File f = new File(directory, hash(key));
106106
f.delete();
107107
}
108+
109+
private static String hash(String base) {
110+
try {
111+
MessageDigest digest = MessageDigest.getInstance("SHA-1");
112+
byte[] hash = digest.digest(base.getBytes());
113+
StringBuffer hexString = new StringBuffer();
114+
115+
for (int i = 0; i < hash.length; i++) {
116+
hexString.append(Integer.toString((hash[i] & 0xff) + 0x100, 16).substring(1));
117+
}
118+
return hexString.toString();
119+
} catch (Exception ex) {
120+
ex.printStackTrace();
121+
}
122+
return null;
123+
}
108124
}

0 commit comments

Comments
 (0)