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