サーバーからダウンロードしたファイルのmd5sumを一致させようとしています。合計が一致する場合にのみ処理が続行されます。
try {
MessageDigest digest = MessageDigest.getInstance("MD5");
File f = new File(fileName);
InputStream is = new FileInputStream(f);
byte[] buffer = new byte[8192];
int read = 0;
while( (read = is.read(buffer)) > 0) {
digest.update(buffer, 0, read);
}
is.close();
byte[] md5sum = digest.digest();
BigInteger bigInt = new BigInteger(1, md5sum);
output = bigInt.toString(16);
System.out.println("MD5: " + output);
} catch(IOException e) {
throw new RuntimeException("Unable to process file for MD5", e);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
上記のコードは、一部のファイルに対して毎回md5sumを適切に提供しません。
コンソールに移動して、md5sum <filename>
md5sumがサーバーのものと同じであることを確認します。しかし、同じものをコードから計算すると、異なる結果が得られます。
ダウンロードしたファイルのvimdiffは差分を提供していません。ダウンロード後のファイルは適切です。
上記のコードで問題を確認できません。
バッファサイズを変更しようとしています。でも運が悪いので、バッファサイズなどのせいではないと思います。
byte[] buffer = new byte[8192];
よろしく
DheerajJoshi