From a86e672639659fd11dbc42b747ab1f5084aa65be Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Mon, 29 Jun 2026 21:53:52 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=20Bolt:=20Java=2021=20`HexFormat`?= =?UTF-8?q?=EC=9D=84=20=EC=9D=B4=EC=9A=A9=ED=95=9C=20=EB=B0=94=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=EB=B0=B0=EC=97=B4=20=EB=B3=80=ED=99=98=20=EC=B5=9C?= =?UTF-8?q?=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `DefaultDocumentConversionService` 파일의 `contentHash` 메서드 내에서 바이트 배열을 16진수 문자열로 변환할 때 사용하던 비효율적인 `String.format` 로직을 Java 21의 네이티브 클래스인 `java.util.HexFormat.of().formatHex(raw)`로 최적화했습니다. --- .jules/bolt.md | 3 +++ .../viewer/service/DefaultDocumentConversionService.java | 9 ++------- 2 files changed, 5 insertions(+), 7 deletions(-) create mode 100644 .jules/bolt.md diff --git a/.jules/bolt.md b/.jules/bolt.md new file mode 100644 index 00000000..c8d052dd --- /dev/null +++ b/.jules/bolt.md @@ -0,0 +1,3 @@ +## 2026-06-29 - Use HexFormat for Byte Array to Hex String Conversion +**Learning:** In Java 21, using `String.format("%02x", b)` inside a loop to convert a byte array to a hex string is inefficient and causes unnecessary object allocations and CPU overhead. +**Action:** Always prefer using `java.util.HexFormat.of().formatHex(bytes)` for converting byte arrays to hex strings in this Java 21 codebase to improve performance. diff --git a/src/main/java/com/clearfolio/viewer/service/DefaultDocumentConversionService.java b/src/main/java/com/clearfolio/viewer/service/DefaultDocumentConversionService.java index 9c595937..4a55e7d4 100644 --- a/src/main/java/com/clearfolio/viewer/service/DefaultDocumentConversionService.java +++ b/src/main/java/com/clearfolio/viewer/service/DefaultDocumentConversionService.java @@ -110,7 +110,7 @@ public RetryDeadLetterResult retryDeadLettered(UUID jobId, String operatorId) { return RetryDeadLetterResult.ACCEPTED; } - private String contentHash(MultipartFile file) { + private String contentHash(final MultipartFile file) { try (InputStream stream = file.getInputStream()) { MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] buffer = new byte[8192]; @@ -121,12 +121,7 @@ private String contentHash(MultipartFile file) { } byte[] raw = digest.digest(); - StringBuilder hex = new StringBuilder(raw.length * 2); - for (byte b : raw) { - hex.append(String.format("%02x", b)); - } - - return hex.toString(); + return java.util.HexFormat.of().formatHex(raw); } catch (NoSuchAlgorithmException ex) { throw new IllegalStateException("SHA-256 digest unavailable", ex); } catch (IOException ex) {