使用Java 1.8,我创建了一个从外部HTTP URL获取zip文件的类:
https:
6aa2fe666f83953a089a2caa8b13b80e
我的实用程序类:
public class HashUtils {
public static String makeHashFromUrl(String fileUrl) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
InputStream is = new URL(fileUrl).openStream();
try {
is = new DigestInputStream(is, md);
byte[] ignoredBuffer = new byte[8 * 1024];
while (is.read(ignoredBuffer) > 0) { }
} finally {
is.close();
}
byte[] digest = md.digest();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < digest.length; i++) {
sb.append(Integer.toString((digest[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}
例如
$CATALINA_HOME/temp/fastText_data.zip
需要使用此选项:
InputStream fis = new FileInputStream(filename);
我怎么能用同样的方法做到这一点(不想违反干-不要重复你自己)?
当然,创建一个包含相同代码但使用
InputStream fis = new FileInputStream(filename);
而不是
InputStream is = new URL(fileUrl).openStream();
会违反干燥原则吗?
有什么好的方法来重构它呢?两个公共方法和一个重构的私有方法包含相同的代码行?