소개
문자열을 바이트 배열로, 또는 바이트 배열을 문자열로 변환해야 하는 경우가 많습니다. 이는 문자 집합 (character sets) 을 사용하여 수행할 수 있습니다. 이 Lab 에서는 여러 가지 방법을 사용하여 두 가지 유형의 변환을 모두 수행하는 방법을 배우겠습니다.
문자열을 바이트 배열로, 또는 바이트 배열을 문자열로 변환해야 하는 경우가 많습니다. 이는 문자 집합 (character sets) 을 사용하여 수행할 수 있습니다. 이 Lab 에서는 여러 가지 방법을 사용하여 두 가지 유형의 변환을 모두 수행하는 방법을 배우겠습니다.
String 클래스의 getBytes() 메서드는 바이트 배열을 얻는 편리한 방법을 제공합니다. String 클래스는 getBytes() 메서드에 대한 세 가지 오버로드된 (overloaded) 버전을 포함합니다.
String s = "demo!";
byte[] byteArr = s.getBytes();
import java.io.UnsupportedEncodingException;
String s = "demo!";
String namedCharset = "UTF-16";
byte[] byteArr = s.getBytes(namedCharset);
import java.nio.charset.Charset;
import java.util.Arrays;
String s = "demo!";
Charset charset = Charset.forName("UTF-16");
byte[] byteArr = s.getBytes(charset);
import java.nio.charset.StandardCharsets;
String s = "demo????????????";
Charset charset = StandardCharsets.ISO_8859_1;
byte[] byteArr = charset.encode(s).array();
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;
String s = "demo????????????";
CharsetEncoder charsetEncoder = StandardCharsets.ISO_8859_1.newEncoder();
charsetEncoder.onMalformedInput(CodingErrorAction.IGNORE);
charsetEncoder.onUnmappableCharacter(CodingErrorAction.REPLACE)
.replaceWith(new byte[] {-121});
byte[] byteArr = charsetEncoder.encode(CharBuffer.wrap(s)).array();
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33};
String stringFromBytes = new String(byteArr, "UTF-16");
Charset charset = Charset.forName("UTF-16");
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33};
String stringFromBytes = new String(byteArr, charset);
import java.nio.ByteBuffer;
Charset charset = StandardCharsets.UTF_16;
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33, -10};
String stringFromBytes = charset.decode(ByteBuffer.wrap(byteArr)).toString();
import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;
CharsetDecoder charsetDecoder = StandardCharsets.UTF_16.newDecoder();
charsetDecoder.onUnmappableCharacter(CodingErrorAction.REPLACE)
.onMalformedInput(CodingErrorAction.REPLACE)
.replaceWith("*");
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33, -10};
String stringFromBytes = charsetDecoder.decode(ByteBuffer.wrap(byteArr)).toString();
실행하려는 코드를 ~/project/Conversion.java와 같은 파일에 복사하고 터미널에서 다음 명령을 실행합니다:
javac Conversion.java && java Conversion
결론적으로, 문자열을 바이트 배열로, 또는 바이트 배열을 문자열로 변환하는 여러 가지 방법이 있습니다. 가장 편리한 방법은 String 클래스의 getBytes() 메서드를 사용하여 바이트 배열을 생성한 다음, String 클래스 생성자를 사용하여 바이트 배열로부터 문자열을 생성하는 것입니다. 또는, Charset, CharsetEncoder 및 CharsetDecoder 를 사용하여 변환을 수행할 수도 있습니다.