mdfingerprint.java
来自「dump3 morpheus 0.2.9 src」· Java 代码 · 共 138 行
JAVA
138 行
/**
* DuMP3 version morpheus_0.2.9 - a duplicate/similar file finder in Java<BR>
* Copyright 2005 Alexander Grässer<BR>
* All Rights Reserved, http://dump3.sourceforge.net/<BR>
* <BR>
* This file is part of DuMP3.<BR>
* <BR>
* DuMP3 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later version.<BR>
* <BR>
* DuMP3 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU General Public License for more details.<BR>
* <BR>
* You should have received a copy of the GNU General Public License along with DuMP3; if not, write to the Free Software Foundation, Inc., 51 Franklin St,
* Fifth Floor, Boston, MA 02110-1301 USA
*/
package net.za.grasser.duplicate.fingerprint;
import java.security.NoSuchAlgorithmException;
import jonelo.jacksum.JacksumAPI;
import jonelo.jacksum.algorithm.AbstractChecksum;
import net.za.grasser.duplicate.file.FingerprintFile;
import net.za.grasser.duplicate.file.Status;
import net.za.grasser.duplicate.fingerprint.configure.ConfigFactory;
import net.za.grasser.duplicate.fingerprint.configure.MDFingerprintConfig;
import net.za.grasser.duplicate.util.HexArray;
import org.apache.log4j.Logger;
/**
* @author <a href="http://sourceforge.net/sendmessage.php?touser=733840">pyropunk at sourceforge dot net</a>
* @version $Revision: 1.10 $
* @modelguid {57599672-FC9B-486D-A969-9A645E7DEFB7}
*/
public class MDFingerprint extends AbstractFingerprint {
/** @modelguid {55FFD1FB-DF09-4575-A86F-A2B682A46924} */
private static final Logger log = Logger.getLogger(MDFingerprint.class);
/**
* <code>config</code> MDFingerprint -
*/
protected static final MDFingerprintConfig config = (MDFingerprintConfig)ConfigFactory.getConfig(MDFingerprint.class);
/**
* <code>checksum</code> MDFingerprint -
*/
protected AbstractChecksum checksum = null;
/**
* @param fi FingerprintFile
* @modelguid {53F63DBA-703A-4B81-882B-F1B4318D5CC9}
*/
public MDFingerprint(final FingerprintFile fi) {
super(fi);
}
/**
* setup phase before reading the file
*/
@Override
protected void preRead() {
try {
checksum = JacksumAPI.getChecksumInstance(config.getMessageDigest());
} catch (final NoSuchAlgorithmException nsae) {
throw new RuntimeException("Checksum Config error!");
}
checksum.setEncoding(AbstractChecksum.HEX);
// checksum.setHex(true);
// checksum.setUpperCase(false);
checksum.reset();
}
/**
* teardown phase after reading the file<BR>
* fingerprint must be computed here
*/
@Override
protected void postRead() {
final String fp = checksum.format("#CHECKSUM");
checksum = null;
log.debug(getFile().getPath() + " fingerprint:" + fp);
fingerprint = HexArray.makeBytes(fp);
}
/**
* update the checksum with a byte array.
*
* @param pBuffer
* @param pLength
*/
@Override
protected void update(final byte[] pBuffer, final int pLength) {
checksum.update(pBuffer, 0, pLength);
}
/**
* @param fi AbstractFingerprint
* @return boolean
* @modelguid {B275D8C6-611D-424F-B031-DB737C07FD11}
*/
@Override
public float matches(final AbstractFingerprint fi) {
final FingerprintFile ff1 = getFile();
final FingerprintFile ff2 = fi.getFile();
if (ff1.getStatus() != Status.FILE_OK && ff1.getStatus() != Status.FILE_SIGNATURE_MISMATCH || ff2.getStatus() != Status.FILE_OK
&& ff2.getStatus() != Status.FILE_SIGNATURE_MISMATCH) {
return 0.0f;
}
if (ff1.getLength() != ff2.getLength()) {
log.debug("" + ff1.getLength() + "!=" + ff2.getLength());
return 0.0f;
}
// try to read the files
getFingerprint();
fi.getFingerprint();
// check status
if ((ff1.getStatus() == Status.FILE_OK || ff1.getStatus() == Status.FILE_SIGNATURE_MISMATCH)
&& (ff2.getStatus() == Status.FILE_OK || ff2.getStatus() == Status.FILE_SIGNATURE_MISMATCH)) {
return equals(getFingerprint(), fi.getFingerprint()) ? 100.0f : 0.0f;
}
return 0.0f;
}
/**
* @return String
* @modelguid {E440866E-6C37-49CC-8B8A-E6645E19C3B1}
*/
@Override
public String getClassName() {
return super.getClassName() + '-' + config.getMessageDigest();
}
/**
* @see net.za.grasser.duplicate.fingerprint.AbstractFingerprint#getSimilarityThreshhold()
*/
@Override
public float getSimilarityThreshhold() {
return config.getSimilarityThreshhold();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?