CharsetDecoder — 특정 문자셋의 바이트 시퀀스를 16비트 유니코드 문자로 변환하는 엔진

CharsetDecoder — 특정 문자셋의 바이트 시퀀스를 16비트 유니코드 문자로 변환하는 엔진

CharsetDecoder는 특정 문자셋의 바이트 시퀀스를 16비트 유니코드 문자 시퀀스로 변환할 수 있는 엔진이에요.

출처: Java API Reference

본문

public abstract class CharsetDecoder extends Object

특정 문자셋의 바이트 시퀀스를 16비트 유니코드 문자 시퀀스로 변환할 수 있는 엔진이에요. 입력 바이트 시퀀스는 바이트 버퍼 또는 그런 버퍼들의 연속으로 제공돼요. 출력 문자 시퀀스는 문자 버퍼 또는 그런 버퍼들의 연속에 기록돼요.

디코더는 항상 다음 메서드 호출 순서로 사용해야 해요(이하 디코딩 연산이라 함):

  1. 아직 사용하지 않은 경우가 아니라면 reset 메서드로 디코더를 리셋해요.
  2. 추가 입력이 있을 수 있는 한 decode 메서드를 endOfInput 인자를 false로 전달하며 0회 이상 호출하고, 호출 사이에 입력 버퍼를 채우고 출력 버퍼를 비워요.
  3. 마지막으로 trueendOfInput으로 전달하며 decode 메서드를 한 번 호출하고,
  4. 디코더가 내부 상태를 출력 버퍼로 비울 수 있도록 flush 메서드를 호출해요.

decode 메서드의 각 호출은 입력 버퍼에서 가능한 많은 바이트를 디코딩해 결과 문자를 출력 버퍼에 써요. 더 많은 입력이 필요하거나, 출력 버퍼에 공간이 부족하거나, 디코딩 오류가 발생하면 decode 메서드는 반환해요. 각 경우 CoderResult 객체가 종료 이유를 설명하도록 반환돼요.

디코딩 오류에는 두 가지 일반적인 유형이 있어요. 입력 바이트 시퀀스가 이 문자셋에 대해 법적이지 않으면 입력이 잘못 구성된(malformed) 것으로 간주돼요. 입력 바이트 시퀀스가 법적이지만 유효한 유니코드 문자로 매핑할 수 없으면 매핑 불가 문자(unmappable character)가 발생한 것이에요.

오류 처리는 CodingErrorAction 클래스의 인스턴스로 설명되는 유형별 요청된 동작에 따라 달라져요. 가능한 오류 동작은 잘못된 입력을 무시하거나, 반환된 CoderResult 객체로 호출자에게 오류를 보고하거나, 잘못된 입력을 대체 문자열(replacement)의 현재 값으로 대체하는 것이에요. 대체 문자열의 초기 값은 "\uFFFD"이며 replaceWith 메서드로 값을 변경할 수 있어요.

잘못된 입력과 매핑 불가 문자 오류의 기본 동작은 보고하는 것이에요. 이 클래스의 인스턴스는 여러 동시 스레드가 안전하게 사용할 수 없어요. Java 1.4부터 사용할 수 있어요.

생성자

protected CharsetDecoder(Charset cs, float averageCharsPerByte, float maxCharsPerByte)

새 디코더를 초기화해요. 새 디코더는 주어진 chars-per-byte 값을 가지며 대체 문자열은 "\uFFFD"예요.

메서드 요약

  • final float averageCharsPerByte() — 입력 바이트마다 생성될 평균 문자 수를 반환해요.
  • final Charset charset() — 이 디코더를 만든 문자셋을 반환해요.
  • final CharBuffer decode(ByteBuffer in) — 단일 입력 바이트 버퍼의 남은 내용을 새로 할당된 문자 버퍼로 디코딩하는 편의 메서드.
  • final CoderResult decode(ByteBuffer in, CharBuffer out, boolean endOfInput) — 주어진 입력 버퍼에서 가능한 많은 바이트를 디코딩해 결과를 주어진 출력 버퍼에 써요.
  • protected abstract CoderResult decodeLoop(ByteBuffer in, CharBuffer out) — 하나 이상의 바이트를 하나 이상의 문자로 디코딩해요.
  • final String replacement() — 디코더의 대체 값을 반환해요.
  • final CharsetDecoder replaceWith(String newReplacement) — 디코더의 대체 값을 변경해요.
  • final CharsetDecoder onMalformedInput(CodingErrorAction newAction) — 디코더의 잘못된 입력 오류 동작을 변경해요.
  • final CharsetDecoder onUnmappableCharacter(CodingErrorAction newAction) — 디코더의 매핑 불가 문자 오류 동작을 변경해요.
  • final CoderResult flush(CharBuffer out) — 디코더를 비워요.
  • final CharsetDecoder reset() — 디코더를 리셋하고 내부 상태를 비워요.

charset

public final Charset charset() — 이 디코더를 만든 문자셋을 반환해요.

replacement

public final String replacement() — 디코더의 현재 대체 값을 반환해요. 절대 null이 아니고 절대 비어 있지 않아요.

replaceWith

public final CharsetDecoder replaceWith(String newReplacement) — 새 대체 값이 적합한지 확인한 후 implReplaceWith 메서드를 호출해 디코더의 대체 값을 변경해요. 새 대체 값은 null이 아니어야 하고, 길이가 0이 아니어야 하며, maxCharsPerByte 메서드가 반환하는 값보다 길지 않아야 해요.

decode (편의)

public final CharBuffer decode(ByteBuffer in) — 단일 입력 바이트 버퍼의 남은 내용을 새로 할당된 문자 버퍼로 디코딩하는 편의 메서드예요. 이 메서드는 다른 오버로드보다 간단하지만 큰 입력에는 비효율적일 수 있어요.

더 알아보기 (Learn more)

Java 공식 API