Java2014. 11. 17. 00:51
반응형

 자바(Java)로 프로그램을 작성하다 보면 Base64인코딩/디코딩 코드를 작성할 필요가 있습니다. 이 경우 자바는 다른 언어와는 다르게 표준API상에 관련 API가 없는 것을 알게 됩니다. 그러나 JVM내부적으로 필요한 경우도 있어서 각 JDK별로 별도의 구현체가 존재하는 경우도 있습니다. 예를 들어 썬마이크로시스템(Sun/Oracle)의 JDK의 경우에는  패키지 sun.misc에 BASE64Encoder/BASE64Decoder 구현체가 존재합니다. 이러한 JDK별로 존재하는 구현체를 사용하는 것은 지양해야 하므로 일반적으로 Apache재단의 commons-codec라이브러리를 이용하게 됩니다. 이번 포스팅에서는 해당 라이브러리의 사용법에 대해서 간단하게 알아보도록 하겠습니다.


 먼저 관련해서 필요한 라이브러리를 아래와 같이 MAVEN이용해서 추가하거나 다운로드해서 빌드패스에 추가하도록 합니다.


commons-codec

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.9</version>
</dependency>


commons-io

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>



※사실 인코딩 자체는 commons-codec라이브러리만 있으면 수행 할 수 있습니다. 구현상의 편의를 위해 유틸리티 라이브러리로 commons-io을 추가하였습니다.







파일을 Base64 문자열로 변환

public static String fileToBase64String(final File target)
throws IOException {

	BufferedInputStream bis = null;
	try {
		bis = new BufferedInputStream(new FileInputStream(target));
		return Base64.encodeBase64String(IOUtils.toByteArray(bis));
	} finally {
		try {
			bis.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


Base64 문자열을 파일로 변환

public static void base64StringToFile(final String encoded, final File output)
throws IOException {

	BufferedOutputStream bos = null;
	try {
		output.createNewFile();
		bos = new BufferedOutputStream(new FileOutputStream(output));
		bos.write(Base64.decodeBase64(encoded));
	} finally {
		try {
			bos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}



  위의 소스코드는 특정 파일을 Base64인코딩하여 문자열로 바꾸고 이를 다시 디코딩하여 파일로 변환하는 코드입니다. 위처럼 단순히 문자열로 바꾸는 것 이외에 URL Safe인코딩(URL이나 파일명등을 인코딩할 경우)타입이나 메일 관련한 MIME인코딩(76문자마다 개행)의 경우 아래의 메소드를 이용해서 인코딩/디코딩을 할 수 있다.



Base64#encodeBase64(final byte[] binaryData, final boolean isChunked, final boolean urlSafe)



 위의 메소드에 isChunked의 인자로 true를 지정할 경우 MIME인코딩, urlSafe의 인자로 true를 지정할 경우 URL Safe타입의 인코딩을 수행할 수 있습니다. 필요에 따라서 지정해서 호출하도록 합시다.



 Base64구현 관련하여 commons-codec라이브러리에 대해서 소개했습니다만 사실 자바8(Java8)부터 드디어(이제서야) 표준API에 Base64관련 API가 제공되기 시작했습니다. 어쩌면 위의 코드는 어느 사이에 사용되지 않을지도 모르겠습니다.


'Java' 카테고리의 다른 글

apache httpclient 요청 디버깅  (0) 2014.11.27
Java8 Base64 Encoder/Decoder  (0) 2014.11.19
apache httpclient applcation/json, multipart/mixed 요청  (2) 2014.10.26
Eclipse java Access restriction rt.jar  (0) 2013.12.04
Java7 zip 파일 압축  (0) 2013.11.26
Posted by Reiphiel