try (InputStream is = item.getInputStream())
{
final MD5DigestCalculatingInputStream digestStream = new MD5DigestCalculatingInputStream(is);
final byte[] bytes = IOUtils.toByteArray(digestStream);
final String newFileName = Hex.encodeHexString(digestStream.getMd5Digest()) + "."
+ FilenameUtils.getExtension(item.getName());
final String newFileName2 = Hex.encodeHexString(digestStream.getMd5Digest()) + "."
+ FilenameUtils.getExtension(item.getName());
}
だから、上記のコードで、私は次のような結果を取得:2つの異なるMD5が同じ入力にありますか?
newFileName = e9f08a9c181551336e58119edd23109b.png
(正)
newFileName2 = d41d8cd98f00b204e9800998ecf8427e.png
(!間違った)
すべて次の結果もnewFileName2のようになります。正しいnewFileNameが何であるかは関係ありません。newFileName2は常に上に示したものと同じ値になります。私は本当にこの問題がどのような場合にわからないのですか?
'getMd5Digest'がストリームを消費している可能性があります –
' digestStream.getMd5Digest() 'の後続の呼び出しを比較し始めますが、同じ結果が得られますか? –