hanker

[JAVA] Java 11 이상에서 sun.misc.BASE64Encoder 대체하기 본문

JAVA

[JAVA] Java 11 이상에서 sun.misc.BASE64Encoder 대체하기

hanker 2025. 5. 28. 02:41
반응형

자바에서 Base64 인코딩/디코딩을 할 때 아직도 sun.misc.BASE64Encoder를 사용하고 있다면, 이제는 사용할 수 없다.

Java 8부터 사용이 권장되지 않았고(deprecated), Java 9부터는 아예 코드에서 제거되었기 때문에 최신 자바 환경에서는 컴파일조차 되지 않는다.

 

대신, Java 8부터 표준 라이브러리에 포함된 공식적인 대체재인 java.util.Base64 클래스를 사용해야 한다.

이 클래스는 Base64 작업을 위한 안정적이고 안전하며 공식적으로 지원되는 방법을 제공한다.

 


Java 11 버전 이상에서 Base64 인코딩/디코딩 예제

 

import java.util.Base64;

public class Base64Example {
    public static void main(String[] args) {
        String originalInput = "Hello, Java 21!";
        
        // 인코딩
        String encodedString = Base64.getEncoder().encodeToString(originalInput.getBytes());
        System.out.println("Encoded: " + encodedString);
        
        // 디코딩
        byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
        String decodedString = new String(decodedBytes);
        System.out.println("Decoded: " + decodedString);
    }
}

설명 : 

  • import java.util.Base64;: 필요한 클래스를 임포트
  • Base64.getEncoder(): 인코딩을 위한 Base64.Encoder 인스턴스를 반환
  • originalInput.getBytes(): 입력 문자열을 바이트 배열로 변환 (기본적으로 UTF-8 인코딩 사용)
  • encodeToString(...): 바이트 배열을 Base64로 인코딩된 String으로 변환
  • Base64.getDecoder(): 디코딩을 위한 Base64.Decoder 인스턴스를 반환
  • decode(encodedString): Base64 문자열을 다시 바이트 배열로 디코딩
  • new String(decodedBytes): 디코딩된 바이트 배열을 다시 String으로 변환

 

 

 


정리

 

항목 sun.misc.BASE64Encoder java.util.Base64
패키지 sun.misc (내부 API) java.util (공식 API)
도입 시점 아주 오래됨 (Java 1.1 이상) Java 8부터 표준, 계속 지원 중
지원 종료 Java 9부터 제거됨 계속 공식 지원
표준 여부 비표준 (내부 전용) 표준 (공식 JDK API)
보안/안정성 JDK 내부 변경에 따라 불안정 안전하고 안정적
URL-safe 지원 없음 getUrlEncoder(), getUrlDecoder() 제공
MIME 지원 없음 getMimeEncoder(), getMimeDecoder() 제공
멀티스레드 안전성 스레드 안전하지 않음 스레드 안전함
사용 권장 여부 사용 금지 (제거됨) 적극 권장
  • sun.misc.BASE64Encoder는 더 이상 사용해서는 안 되며, Java 9부터는 아예 존재하지 않음.
  • java.util.Base64는 기능도 더 많고, 공식적으로 지원되며, 보안성과 호환성도 높음.

 

반응형