From cd9eee61f31921b4ffbd9ea7ddc6f384195d96eb Mon Sep 17 00:00:00 2001 From: Timi Date: Fri, 24 Oct 2025 11:58:28 +0800 Subject: [PATCH] add IO.md5(InputStream) --- src/main/java/com/imyeyu/io/IO.java | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/imyeyu/io/IO.java b/src/main/java/com/imyeyu/io/IO.java index bc58f20..3dc13d2 100644 --- a/src/main/java/com/imyeyu/io/IO.java +++ b/src/main/java/com/imyeyu/io/IO.java @@ -1029,15 +1029,23 @@ public class IO implements OS.FileSystem { * * @param file 文件 * @return MD5 - * @throws NoSuchAlgorithmException JDK 不支持此算法 */ - public static String md5(File file) throws NoSuchAlgorithmException { - try { + public static String md5(File file) throws FileNotFoundException { + return md5(getInputStream(file)); + } + + /** + * 计算输入流 MD5 + * + * @param stream 输入流 + * @return MD5 + */ + public static String md5(InputStream stream) { + try (stream) { MessageDigest md = MessageDigest.getInstance("MD5"); - InputStream is = getInputStream(file); byte[] buffer = new byte[8192]; int l; - while ((l = is.read(buffer)) != -1) { + while ((l = stream.read(buffer)) != -1) { md.update(buffer, 0, l); } byte[] bytes = md.digest(); @@ -1046,9 +1054,8 @@ public class IO implements OS.FileSystem { chars[j++] = Text.HEX_DIGITS_LOWER[bytes[i] >>> 4 & 0xF]; chars[j++] = Text.HEX_DIGITS_LOWER[bytes[i] & 0xF]; } - is.close(); return new String(chars); - } catch (IOException e) { + } catch (IOException | NoSuchAlgorithmException e) { throw new RuntimeException(e); } }