🤔 getBytes()이란?
getBytes() 메서드는 String(문자열)을 default charset으로 인코딩하여 byte 배열로 반환해준다.
이 문자열(String)을 플랫폼의 default charset을 사용하여 바이트의 시퀀스로 인코딩하고, 새로운 바이트 배열에 결과를 저장한다.
이 문자열이 default charset으로 인코딩 할 수 없는 경우 이 메서드의 동작은 지정되지 않는다.
이 java.nio.charset.CharsetEncoder 클래스는 인코딩 과정에 더 많은 제어가 필요할 때 사용한다.
Return : 위 내용에서 언급한 결과로 생긴 byte 배열
즉, 우리가 사용하는 IDE의 default charset을 사용하여 문자열을 byte로 인코딩하여 byte 배열에 넣어서 반환해준다는 말이다.
🤔 getBytes(charset) 이란?
이 문자열(String)을 주어진 charset을 사용하여 byte의 시퀀스로 인코딩하고, 새로운 byte 배열에 결과를 저장한다.
매개변수(Params) : 문자열을 인코딩하는데 사용되는 Charset
반환값(Returns) : 위 내용에서 언급한 결과로 생긴 byte 배열
즉, 매개변수로 받은 charset으로 문자열을 인코딩하여 byte배열에 담아 반환해준다.
🤔 인코딩이 있다면 디코딩은 어떻게 하나요?
바로 new String(byte[])을 사용한다!
IDE에서 new String(byte[])을 Ctrl 누르고 클릭해보면 다음과 같이 String 클래스 쪽으로 넘어간다.
플랫폼의 default charset을 사용하여 지정된 byte 배열을 디코딩하여 새로운 String(문자열)을 생성한다.
새로운 문자열의 길이는 charset의 기능때문에 byte 배열의 길이와 같지 않을 수 있다.
주어진 byte가 default charset에서 유효하지 않을 때 이 생성자의 동작은 지정되지 않는다.
java.nio.charset.CharsetDecoder 클래스는 디코딩 과정에서 더 많은 제어가 필요할 때 사용된다.
매개변수(Params) : bytes - 문자(character)들로 디코딩할 bytes
즉, new String(byte[])을 입력하면 byte[]을 default charset으로 디코딩한 문자열을 생성한다.
이렇게 디코딩을 진행할 수 있다.
그렇다면 내가 지정한 charset으로 인코딩도 할 수 있듯이, 디코딩도 가능하다.
바로 new String(byte[] , charset) 을 사용한다!!!
이것도 위와 똑같은 과정인데 변경된 점이 내가 지정한 charset으로 디코딩하는 점이다.
💻 실습해보자
이렇게 코드를 작성하여 입력해보자.
"Hello!!!" 를 입력하면 default charset으로 인코딩된 byte 배열이 만들어져서 출력된다.
마지막에 default charset으로 디코딩하여 String(문자열)로 만들어서 다시 출력한다.
Java8에서 지원하는 인코딩 종류(Supported Encodings)는 Oracle에서 제공하는 문서를 참고하자.
https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html
느낀점
이렇게 자바에서 내가 지정한 charset으로 인코딩과 디코딩을 하는 방법을 알게되었다.
getBytes()와 new String()으로 이런 방법이 있을 줄 몰랐는데 새로 알게된 점이었다.
이러한 문자열 인코딩을 알고 있어야지 암호화와 복호화를 할 수 있을 것 같다.
'프로그래밍 > Java' 카테고리의 다른 글
Java 줄바꿈문자 \n 이란? (0) | 2022.02.17 |
---|---|
JVM(자바가상머신)이란? - Part 3, ClassLoader (0) | 2022.02.01 |
자바 toCharArray() (1) | 2022.01.28 |
JVM(자바가상머신)이란? - Part 2, Execution Engine (0) | 2022.01.26 |
JVM(자바가상머신)이란? - Part 1, 소개 (0) | 2022.01.23 |