문자열과 바이트 배열 간 변환

JavaBeginner
지금 연습하기

소개

문자열을 바이트 배열로, 또는 바이트 배열을 문자열로 변환해야 하는 경우가 많습니다. 이는 문자 집합 (character sets) 을 사용하여 수행할 수 있습니다. 이 Lab 에서는 여러 가지 방법을 사용하여 두 가지 유형의 변환을 모두 수행하는 방법을 배우겠습니다.

getBytes() 메서드 사용

String 클래스의 getBytes() 메서드는 바이트 배열을 얻는 편리한 방법을 제공합니다. String 클래스는 getBytes() 메서드에 대한 세 가지 오버로드된 (overloaded) 버전을 포함합니다.

String s = "demo!";
byte[] byteArr = s.getBytes();

getBytes(String charsetName) 메서드 사용

import java.io.UnsupportedEncodingException;

String s = "demo!";
String namedCharset = "UTF-16";
byte[] byteArr = s.getBytes(namedCharset);

getBytes(Charset charset) 메서드 사용

import java.nio.charset.Charset;
import java.util.Arrays;

String s = "demo!";
Charset charset = Charset.forName("UTF-16");
byte[] byteArr = s.getBytes(charset);

Charset.encode() 메서드 사용

import java.nio.charset.StandardCharsets;

String s = "demo????????????";
Charset charset = StandardCharsets.ISO_8859_1;
byte[] byteArr = charset.encode(s).array();

CharsetEncoder 사용

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();

String 생성자 사용법

byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33};
String stringFromBytes = new String(byteArr, "UTF-16");

Charset 인스턴스 사용

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);

Charset.decode() 메서드 사용법

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();

CharsetDecoder 사용 방법

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 를 사용하여 변환을 수행할 수도 있습니다.