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

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

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

출처: Java API Reference

본문

public abstract class CharsetEncoder extends Object

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

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

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

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

오류 처리는 CodingErrorAction 클래스의 인스턴스로 설명되는 유형별 요청된 동작에 따라 달라져요. 가능한 오류 동작은 잘못된 입력을 무시하거나, 반환된 CoderResult 객체로 호출자에게 오류를 보고하거나, 잘못된 입력을 대체 바이트 배열(replacement)의 현재 값으로 대체하는 것이에요. 대체 값은 초기에 인코더의 기본 대체 값으로 설정되며, 종종(항상은 아니지만) { (byte)'?' }의 초기 값을 가져요. replaceWith 메서드로 값을 변경할 수 있어요.

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

생성자

protected CharsetEncoder(Charset cs, float averageBytesPerChar, float maxBytesPerChar) — 주어진 bytes-per-char 값을 갖고 대체 값이 { (byte)'?' }인 새 인코더를 초기화해요.

protected CharsetEncoder(Charset cs, float averageBytesPerChar, float maxBytesPerChar, byte[] replacement) — 주어진 bytes-per-char 및 replacement 값을 갖는 새 인코더를 초기화해요.

메서드 요약

  • final float averageBytesPerChar() — 입력 문자마다 생성될 평균 바이트 수를 반환해요.
  • boolean canEncode(char c) — 이 인코더가 주어진 문자를 인코딩할 수 있는지 여부를 알려줘요.
  • boolean canEncode(CharSequence cs) — 이 인코더가 주어진 문자 시퀀스를 인코딩할 수 있는지 여부를 알려줘요.
  • final Charset charset() — 이 인코더를 만든 문자셋을 반환해요.
  • final ByteBuffer encode(CharBuffer in) — 단일 입력 문자 버퍼의 남은 내용을 새로 할당된 바이트 버퍼로 인코딩하는 편의 메서드.
  • final CoderResult encode(CharBuffer in, ByteBuffer out, boolean endOfInput) — 주어진 입력 버퍼에서 가능한 많은 문자를 인코딩해 결과를 주어진 출력 버퍼에 써요.
  • protected abstract CoderResult encodeLoop(CharBuffer in, ByteBuffer out) — 하나 이상의 문자를 하나 이상의 바이트로 인코딩해요.
  • final CoderResult flush(ByteBuffer out) — 인코더를 비워요.
  • final byte[] replacement() — 인코더의 대체 값을 반환해요.
  • final CharsetEncoder replaceWith(byte[] newReplacement) — 인코더의 대체 값을 변경해요.
  • final CharsetEncoder onMalformedInput(CodingErrorAction newAction) — 인코더의 잘못된 입력 오류 동작을 변경해요.
  • final CharsetEncoder onUnmappableCharacter(CodingErrorAction newAction) — 인코더의 매핑 불가 문자 오류 동작을 변경해요.
  • boolean isLegalReplacement(byte[] repl) — 주어진 바이트 배열이 이 인코더의 법적 대체 값인지 여부를 알려줘요.
  • final CharsetEncoder reset() — 인코더를 리셋하고 내부 상태를 비워요.

encode (편의)

public final ByteBuffer encode(CharBuffer in) — 단일 입력 문자 버퍼의 남은 내용을 새로 할당된 바이트 버퍼로 인코딩하는 편의 메서드예요. 이 메서드는 잘못된 입력과 매핑 불가 문자를 인코더의 대체 값으로 처리해요.

더 알아보기 (Learn more)

Java 공식 API