0
我有一個數據庫存儲在不同文件頭的內存中。我想測試一個給定文件的簽名,例如一個.jpg到數據庫中的簽名。如何將文件簽名與簽名數據庫進行比較?
考慮到這種情況,要測試的文件的簽名是FFD8FFE0,但是在數據庫中,只有部分匹配的FFD8FF簽名,有時候數據庫也有FFD8簽名,但是對於不同的類型,但是具有相同的文件格式。 如何正確檢索測試文件的正確匹配簽名?
我寫了下面的函數,但它並不適用於所有文件格式。
public static boolean searchSignature(File file, List<FileSignature> db) throws FileNotFoundException, IOException {
byte[] buffer = new byte[MAX_SIGNATURE_SIZE];
InputStream in = new FileInputStream(file);
int n = in.read(buffer, 0, MAX_SIGNATURE_SIZE);
String hex = toHex(buffer);
boolean b = true;
// for each signature in the database, compare it with file's siganture
for (FileSignature fs : db) {
if (!fs.getSignature().contains(hex)) {
b = false;
}
}
return b;
}
簡短評論:你應該關閉()你的輸入流! – fge 2011-12-17 10:26:55
另外,你使用`contains()`:它將匹配字符串中的任何地方。你確定你不是指`startsWith()`,即`hex.startsWith(fs.getSignature())`? – fge 2011-12-17 10:27:46