From 5e91e8539821d3bbb102c92d1b0f89d2706e2a9e Mon Sep 17 00:00:00 2001 From: Slawomir Jaranowski Date: Tue, 24 Sep 2024 22:35:16 +0200 Subject: [PATCH] Read only first 8 bytes of class in JavaClassfileVersion We don't need to read whole class file, only first 8 bytes are used. --- .../java/version/JavaClassfileVersion.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/plexus-java/src/main/java/org/codehaus/plexus/languages/java/version/JavaClassfileVersion.java b/plexus-java/src/main/java/org/codehaus/plexus/languages/java/version/JavaClassfileVersion.java index e909f8f..d380a01 100644 --- a/plexus-java/src/main/java/org/codehaus/plexus/languages/java/version/JavaClassfileVersion.java +++ b/plexus-java/src/main/java/org/codehaus/plexus/languages/java/version/JavaClassfileVersion.java @@ -1,6 +1,7 @@ package org.codehaus.plexus.languages.java.version; import java.io.IOException; +import java.io.InputStream; import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.Path; @@ -62,9 +63,19 @@ public static JavaClassfileVersion of(byte[] bytes) { * @return the {@link JavaClassfileVersion} of the path java class */ public static JavaClassfileVersion of(Path path) { - try { - byte[] readAllBytes = Files.readAllBytes(path); - return of(readAllBytes); + try (InputStream is = Files.newInputStream(path)) { + byte[] bytes = new byte[8]; + int total = 0; + while (total < 8) { + int l = is.read(bytes, total, 8 - total); + if (l > 0) { + total += l; + } + if (l == -1) { + break; + } + } + return of(bytes); } catch (IOException ex) { throw new UncheckedIOException(ex); }