|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
java.lang.Objectjava.nio.charset.CharsetEncoder
public abstract class CharsetEncoder
16 비트 Unicode 문자의 순서를 특정의 캐릭터 세트로 표현된 바이트 순서로 변환하는 엔진입니다.
입력 문자 순서는, 단일의 문자 버퍼 또는 일련의 문자 버퍼로서 제공됩니다. 출력 바이트 순서는, 단일의 byte 버퍼 또는 일련의 byte 버퍼에 기입해집니다. 엔코더를 사용하려면 , 반드시 다음의 메소드 호출 순서 (이하 「encode 처리」)에 따라 주세요.
encode 에러에는 일반적인 2 종류의 에러가 있습니다. 입력 문자 순서가 정당한 16 비트 Unicode 순서가 아닌 경우는, 「부정 입력 에러」가 발생합니다. 입력 문자 순서는 정당해도, 이것을 유효한 바이트 순서에 맵 할 수 없는 경우는, 「맵 불가 문자 에러」가 발생합니다.
특정의 encode 에러가 어떻게 처리될까는, 그 타입의 에러에 대해서 요구되는 액션에 의해 정해집니다. 이러한 액션은, 부정 입력 에러나 맵 불가 문자 에러가 발생했을 경우, 디폴트의 액션으로서 이러한 에러의 { 이 클래스는, 에러 액션의 구현을 시작으로 하는 encode 처리의 상세한 대부분을 처리하도록(듯이) 설계되고 있습니다. 특정의 캐릭터 세트에 대한 엔코더 (이 클래스의 구상 서브 클래스)가 구현할 필요가 있는 것은, 표준 encode 루프를 캡슐화하는 추상 메소드 이 클래스의 인스턴스는, 복수의 thread로 병행해 사용할 수 없습니다.
encode
메소드를 호출할 때마다, 입력 버퍼내의 문자가 바이트에 encode 되어 출력 버퍼에 기입해집니다. 새로운 입력 요구를 받아들이거나 출력 버퍼의 용량이 부족하거나 encode 에러가 발생하거나 하면(자),encode
메소드는 종료해, 종료의 원인을 나타내는 CoderResult
객체를 돌려줍니다. 호출원래는, 이 객체를 확인해, 입력 버퍼를 가득 하는지, 출력 버퍼를 플래시 하는지, encode 에러로부터의 회복 처리를 실행해, 호출을 재시행합니다.
CodingErrorAction
클래스의 인스턴스에 의해 기술됩니다. 이용 가능한 에러 액션은, 에러 입력의
, 반환값 무시
CoderResult
객체를 경유한 호출 원래로의 에러의
, 현재의 치환 바이트 배열치에 의한 에러 입력의 보고
의 3 개입니다. 치환치는, 우선 엔코더의 디폴트의 치환치로 설정됩니다. 그 초기치는 일반적으로, 「{ (byte)'? ' }」입니다만, 그렇게 되지 않는 경우도 있습니다.
치환
를 합니다. 부정 입력 에러에 대한 액션을 변경하는 경우는 보고
onMalformedInput
메소드를, 맵 불가 문자 에러에 대한 액션을 변경하는 경우는 onUnmappableCharacter
메소드를, 각각 사용합니다.
encodeLoop
뿐입니다. 이것에 가세해 내부 상태를 보관 유지하는 서브 클래스는,implFlush
메소드와 implReset
메소드를 오버라이드(override) 할 필요가 있습니다.
ByteBuffer
,
CharBuffer
,
Charset
,
CharsetDecoder
생성자 의 개요 | |
---|---|
protected |
CharsetEncoder (Charset cs,
float averageBytesPerChar,
float maxBytesPerChar)
새로운 엔코더를 초기화합니다. |
protected |
CharsetEncoder (Charset cs,
float averageBytesPerChar,
float maxBytesPerChar,
byte[] replacement)
새로운 엔코더를 초기화합니다. |
메소드의 개요 | |
---|---|
float |
averageBytesPerChar ()
입력 문자 마다 생성되는 평균 바이트수를 돌려줍니다. |
boolean |
canEncode (char c)
이 엔코더가 지정된 문자를 encode 할 수 있을지 어떨지를 판단합니다. |
boolean |
canEncode (CharSequence cs)
이 엔코더가 지정된 문자 순서를 encode 할 수 있을지 어떨지를 판단합니다. |
Charset |
charset ()
이 엔코더를 작성한 캐릭터 세트를 돌려줍니다. |
ByteBuffer |
encode (CharBuffer in)
단일의 입력 문자 버퍼의 컨텐츠를 새롭게 할당할 수 있었던 byte 버퍼내에 encode 하는 편리한 메소드입니다. |
CoderResult |
encode (CharBuffer in,
ByteBuffer out,
boolean endOfInput)
지정된 입력 버퍼내의 문자를 최대한 encode 해, 지정된 출력 버퍼에 결과를 기입합니다. |
protected abstract CoderResult |
encodeLoop (CharBuffer in,
ByteBuffer out)
1 개이상의 문자 1 개 이상의 바이트에 encode 합니다. |
CoderResult |
flush (ByteBuffer out)
이 엔코더를 플래시 합니다. |
protected CoderResult |
implFlush (ByteBuffer out)
이 엔코더를 플래시 합니다. |
protected void |
implOnMalformedInput (CodingErrorAction newAction)
부정 입력 에러에 대한, 이 엔코더의 액션이 변경된 것을 보고합니다. |
protected void |
implOnUnmappableCharacter (CodingErrorAction newAction)
맵 불가 문자 에러에 대한, 이 엔코더의 액션이 변경된 것을 보고합니다. |
protected void |
implReplaceWith (byte[] newReplacement)
이 엔코더의 대체치가 변경된 것을 보고합니다. |
protected void |
implReset ()
이 엔코더를 리셋 해, 캐릭터 세트 고유의 내부 상태를 클리어 합니다. |
boolean |
isLegalReplacement (byte[] repl)
지정된 바이트 배열이, 이 엔코더의 대체치로서 정당한가 어떤가를 판단합니다. |
CodingErrorAction |
malformedInputAction ()
부정 입력 에러에 대한, 이 엔코더의 현재의 액션을 돌려줍니다. |
float |
maxBytesPerChar ()
입력 문자 마다 생성되는 최대 바이트수를 돌려줍니다. |
CharsetEncoder |
onMalformedInput (CodingErrorAction newAction)
부정 입력 에러에 대한, 이 엔코더의 액션을 변경합니다. |
CharsetEncoder |
onUnmappableCharacter (CodingErrorAction newAction)
맵 불가 문자 에러에 대한, 이 엔코더의 액션을 변경합니다. |
byte[] |
replacement ()
이 엔코더의 치환치를 돌려줍니다. |
CharsetEncoder |
replaceWith (byte[] newReplacement)
이 엔코더의 대체치를 변경합니다. |
CharsetEncoder |
reset ()
이 엔코더를 리셋 해, 내부 상태를 클리어 합니다. |
CodingErrorAction |
unmappableCharacterAction ()
맵 불가 문자 에러에 대한, 이 엔코더의 현재의 액션을 돌려줍니다. |
클래스 java.lang. Object 로부터 상속된 메소드 |
---|
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait |
생성자 의 상세 |
---|
protected CharsetEncoder(Charset cs, float averageBytesPerChar, float maxBytesPerChar, byte[] replacement)
averageBytesPerChar
- 입력 문자 마다 생성되는 예상 바이트수를 나타내는 정의 float 치maxBytesPerChar
- 입력 문자 마다 생성되는 최대 바이트수를 나타내는 정의 float 치replacement
- 치환의 초기치. null 가 아니고, 길이가 1 이상 maxBytesPerChar 이하의
정당
인 값이 아니면 안된다
IllegalArgumentException
- 상기의 파라미터의 전제 조건이 채워지지 않은 경우protected CharsetEncoder(Charset cs, float averageBytesPerChar, float maxBytesPerChar)
averageBytesPerChar
- 입력 문자 마다 생성되는 예상 바이트수를 나타내는 정의 float 치maxBytesPerChar
- 입력 문자 마다 생성되는 최대 바이트수를 나타내는 정의 float 치
IllegalArgumentException
- 상기의 파라미터의 전제 조건이 채워지지 않은 경우메소드의 상세 |
---|
public final Charset charset()
public final byte[] replacement()
public final CharsetEncoder replaceWith(byte[] newReplacement)
이 메소드는, 새로운 치환치가 조건에 맞고 있는 것을 확인한 데다가, 그 값을 지정해 implReplaceWith
메소드를 호출합니다.
newReplacement
- 새로운 치환치. null 가 아니고, 길이가 1 이상으로 maxBytesPerChar
메소드의 반환값 이하의 정당
인 값이 아니면 안된다
IllegalArgumentException
- 상기의 파라미터의 전제 조건이 채워지지 않은 경우protected void implReplaceWith(byte[] newReplacement)
이 메소드의 디폴트 구현에서는 어떤 처리도 행해지지 않습니다. 치환치의 변경 통지를 필요로 하는 엔코더에서는, 이 메소드를 오버라이드(override) 할 필요가 있습니다.
newReplacement
- public boolean isLegalReplacement(byte[] repl)
대체치는, 이 엔코더의 캐릭터 세트로 표현할 수 있는 정당한 바이트 순서인 경우, 즉, 이 값을 1 개 이상의 16 비트 Unicode 문자에 디코드할 수 있는 경우에 한해 정당합니다.
이 메소드의 디폴트 구현은 너무 효율이 좋지 않습니다. 일반적으로, 이 성능을 개선하기 위해서는, 오버라이드(override)가 필요합니다.
repl
- 테스트하는 바이트 배열
public CodingErrorAction malformedInputAction()
public final CharsetEncoder onMalformedInput(CodingErrorAction newAction)
이 메소드는, 새로운 액션을 지정해 implOnMalformedInput
메소드를 호출합니다.
newAction
- 새로운 액션 (null 이외)
IllegalArgumentException
- 상기의 파라미터의 전제 조건이 채워지지 않은 경우protected void implOnMalformedInput(CodingErrorAction newAction)
이 메소드의 디폴트 구현에서는 어떤 처리도 행해지지 않습니다. 부정 입력 에러에 대한 액션의 변경 통지를 필요로 하는 엔코더에서는, 이 메소드를 오버라이드(override) 할 필요가 있습니다.
public CodingErrorAction unmappableCharacterAction()
public final CharsetEncoder onUnmappableCharacter(CodingErrorAction newAction)
이 메소드는, 새로운 액션을 지정해 implOnUnmappableCharacter
메소드를 호출합니다.
newAction
- 새로운 액션 (null 이외)
IllegalArgumentException
- 상기의 파라미터의 전제 조건이 채워지지 않은 경우protected void implOnUnmappableCharacter(CodingErrorAction newAction)
이 메소드의 디폴트 구현에서는 어떤 처리도 행해지지 않습니다. 맵 불가 문자 에러에 대한 액션의 변경 통지를 필요로 하는 엔코더에서는, 이 메소드를 오버라이드(override) 할 필요가 있습니다.
public final float averageBytesPerChar()
public final float maxBytesPerChar()
public final CoderResult encode(CharBuffer in, ByteBuffer out, boolean endOfInput)
버퍼에 대한 읽고 쓰기는, 각 버퍼의 현재 위치로부터 행해집니다. 읽어내지는 문자수는 많아서 in.remaining()
바이트, 기입해지는 바이트수는 많아서 out.remaining()
문자입니다. 버퍼의 위치는, 읽어내진 문자수 또는 기입해진 바이트수에 따라 증가합니다만, 마크와 리밋트는 그대로입니다.
이 메소드는, 입력 버퍼로부터의 문자의 read와 출력 버퍼에의 바이트의 기입에 가세해 종료의 이유를 설명하는 다음과 같은 CoderResult
객체를 돌려줍니다.
CoderResult.UNDERFLOW
. 입력 버퍼내의 바이트가 최대한 encode 된 것을 나타낸다. 그 이상 입력이 없는 경우, 호출원래는encode 처리의 다음의 순서에 진행될 수가 있습니다. 그 이외의 경우, 한층 더 입력 데이터를 준비해, 이 메소드를 재차 호출할 필요가 있습니다.
CoderResult.OVERFLOW
. 출력 버퍼의 용량이 부족해, 더 이상 문자를 encode 할 수 없는 것을 나타냅니다. 나머지의 바이트수가 많은 출력 버퍼를 지정해, 이 메소드를 재차 호출할 필요가 있습니다. 이 때문에는 일반적으로, 출력 버퍼에 들어가 있는 encode 끝난 바이트를 배출합니다.
결과. 부정한 입력 에러가 검출된 것을 나타낸다. 부정한 문자는, 입력 버퍼의 위치 (위치의 값이 증가하고 있을 가능성도 있다)로부터 시작됩니다. 부정한 문자수는, 결과 객체의 부정 입력
length
메소드를 호출하는 것으로 특정할 수 있습니다. 다만, 이것이 들어맞는 것은, 이 디코더의
이 부정 입력 에러에 대한 액션
CodingErrorAction.REPORT
인 경우에 한해집니다. 그 이외의 경우, 부정 입력은 요구에 응해 무시되는지, 다른 값에 치환됩니다.
결과. 맵 불가 문자 에러가 검출된 것을 나타낸다. 맵 할 수 없는 문자는, 입력 버퍼의 위치 (위치의 값이 증가하고 있을 가능성도 있다)로부터 시작됩니다. 그 문자수는, 결과 객체의 맵 불가 문자
length
메소드를 호출하는 것으로 특정할 수 있습니다. 다만, 이것이 들어맞는 것은, 이 엔코더의
이 맵 불가 문자 에러에 대한 액션
CodingErrorAction.REPORT
인 경우에 한해집니다. 그 이외의 경우, 부정 입력은 요구에 응해 무시되는지, 다른 값에 치환됩니다.
endOfInput 파라미터는, 지정된 입력 버퍼에 호출해 원으로부터의 새로운 입력이 있을지 어떨지를 이 메소드에 통지합니다. 아직 입력의 가능성이 있는 경우, 호출원래는 이 파라미터에 false 를 건네줄 필요가 있습니다. 더 이상 입력의 가능성이 없는 경우는 true 를 건네줍니다. 호출원으로부터 false 를 건네준 후에 입력이 없었다고 해도, 문제는 없습니다. 그러나, calling sequence에 있어서의 마지막 호출에서는,true 를 건네주지 않으면 안됩니다. 이 이후, 아직 encode되어 있지 않은 입력은 「부정」이라고 보여지게 됩니다.
이 메소드는, 우선 encodeLoop
메소드를 호출합니다. 그 후, 그 결과를 해석해, 에러 조건의 처리를 끝마친 뒤, 필요에 따라서 재차 그 메소드를 호출합니다.
in
- 입력 문자 버퍼out
- 출력 byte 버퍼endOfInput
- 호출원이 지정된 버퍼에 더 이상의 입력 문자를 추가할 가능성이 없는 경우에 한해 true
IllegalStateException
- encode 처리가 벌써 진행중이며, 그 직전의 처리가 reset
메소드의 호출에서도,endOfInput 파라미터에 false 를 지정한 이 메소드의 호출에서도,endOfInput 파라미터에 true 를 지정한 이 메소드의 호출도 아닌데, encode 처리가 불완전한 것을 나타내는 반환값이 돌려주어졌을 경우
CoderMalfunctionError
- encodeLoop 메소드의 호출에 의해 예상외의 예외가 throw 되었을 경우public final CoderResult flush(ByteBuffer out)
내부 상태를 보관 유지하는 일부의 엔코더는, 입력 순서의 read가 완료한 시점에서, 출력 버퍼에 끝 바이트를 기입할 필요가 있습니다.
추가의 출력은, 출력 버퍼의 현재 위치에 기입해집니다. 기입해지는 바이트수는 많아서 out.remaining()
바이트입니다. 버퍼의 위치는 이 바이트수에 따라 증가합니다만, 마크와 리밋트는 그대로입니다.
이 메소드는, 정상적으로 종료했을 경우 CoderResult.UNDERFLOW
를 돌려줍니다. 출력 버퍼의 용량이 부족했을 경우는 CoderResult.OVERFLOW
를 돌려줍니다. CoderResult.OVERFLOW
가 돌려주어졌을 경우는, 보다 많은 빈영역을 가지는 출력 버퍼를 지정해 이 메소드를 재차 호출해, 이encode 처리를 완료시킬 필요가 있습니다.
이 엔코더의 플래시 후에 이 메소드를 호출해도, 무슨 효과도 없습니다.
이 메소드는,implFlush
메소드를 호출하는 것으로, 실제의 플래시 처리를 실시합니다.
out
- 출력 byte 버퍼
CoderResult.UNDERFLOW
또는 CoderResult.OVERFLOW
IllegalStateException
- 현재의 encode 처리의 직전의 처리가,flush
메소드의 호출에서도,endOfInput 파라미터에 true 를 지정한 3 개의 인수를 가지는 encode
메소드의 호출도 아닌 경우protected CoderResult implFlush(ByteBuffer out)
이 메소드의 디폴트 구현은, 어떤 처리도 실시하지 않고, 항상 CoderResult.UNDERFLOW
를 돌려줍니다. 입력 순서의 read 완료 후에 출력 버퍼에 마지막 바이트를 기입할 필요가 있는 엔코더에서는, 이 메소드를 오버라이드(override) 할 필요가 있습니다.
out
- 출력 byte 버퍼
CoderResult.UNDERFLOW
또는 CoderResult.OVERFLOW
public final CharsetEncoder reset()
이 메소드는, 캐릭터 세트에 의존하지 않는 상태를 리셋 합니다. 또, 캐릭터 세트 고유의 리셋 액션을 실행하기 위해서, implReset
메소드도 호출합니다.
protected void implReset()
이 메소드의 디폴트 구현에서는 어떤 처리도 행해지지 않습니다. 내부 상태를 보관 유지하는 엔코더에서는, 이 메소드를 오버라이드(override) 할 필요가 있습니다.
protected abstract CoderResult encodeLoop(CharBuffer in, ByteBuffer out)
이 메소드는, 기본적인 encode 루프를 캡슐화해, 입력이 없어지는지, 출력 버퍼의 용량이 부족하는지, 또는 encode 에러가 발생할 때까지 최대한의 문자를 encode 합니다. 이 메소드는, 결과 해석과 에러 복구를 실시하는 encode
메소드에 의해 불려 갑니다.
버퍼에 대한 읽고 쓰기는, 각 버퍼의 현재 위치로부터 행해집니다. 읽어내지는 문자수는 많아서 in.remaining()
바이트, 기입해지는 바이트수는 많아서 out.remaining()
문자입니다. 버퍼의 위치는, 읽어내진 문자수 또는 기입해진 바이트수에 따라 증가합니다만, 마크와 리밋트는 그대로입니다.
이 메소드는,encode
메소드와 같게, 종료의 이유를 기술한 CoderResult
객체를 돌려줍니다. 이 메소드의 구현의 대부분은,encode
메소드에서의 해석에 필요한 결과 객체를 돌려주는 것으로, encode 에러를 처리합니다. 이것에 대해, 최적화된 구현은, 관련 에러 액션을 조사해 그 액션을 자신으로 실행할 가능성도 있습니다.
이 메소드의 구현에 따라서는, 충분한 양의 입력을 받을 때까지 임의의 전방 검색을 실시해,CoderResult.UNDERFLOW
를 계속 돌려줄 가능성이 있습니다.
in
- 입력 문자 버퍼out
- 출력 byte 버퍼
public final ByteBuffer encode(CharBuffer in) throws CharacterCodingException
이 메소드는,encode 처리 전체를 구현하고 있습니다. 즉, 이 메소드는, 이 엔코더를 리셋 한 뒤, 지정된 문자 버퍼내의 문자를 encode 해, 마지막에 이 엔코더를 플래시 합니다. 따라서, encode 처리가 벌써 진행중의 경우는, 이 메소드를 호출하지 말아 주세요.
in
- 입력 문자 버퍼
IllegalStateException
- encode 처리가 벌써 진행중인 경우
MalformedInputException
- 입력 버퍼의 현재 위치로부터 시작되는 문자 순서가 정당한 16 비트 Unicode 순서가 아니고, 부정 입력 에러에 대한 액션이 CodingErrorAction.REPORT
인 경우
UnmappableCharacterException
- 입력 버퍼의 현재 위치로부터 시작되는 문자 순서를 동등의 바이트 순서에 맵 하지 못하고, 맵 할 수 없는 문자 에러에 대한 액션이 CodingErrorAction.REPORT
인 경우
CharacterCodingException
public boolean canEncode(char c)
지정된 문자가 surrogate 문자인 경우, 이 메소드는 false 를 돌려줍니다. surrogate 문자를 해석할 수 있는 것은, 상위 surrogate의 후에 하위 surrogate가 계속되는 형태의 페어가 되어 있는 경우만입니다. 문자 순서의 encode가 가능한지 어떤지는,canEncode(CharSequence)
메소드를 사용해 테스트할 수 있습니다. 이 메소드는, 이 엔코더 상태를 변경합니다.
이 메소드는, 이 엔코더 상태를 변경합니다. 벌써encode 처리가 진행되고 있는 경우는, 이 메소드를 호출하지 말아 주세요.
이 메소드의 디폴트 구현은 너무 효율이 좋지 않습니다. 일반적으로, 이 성능을 개선하기 위해서는, 오버라이드(override)가 필요합니다.
IllegalStateException
- encode 처리가 벌써 진행중인 경우public boolean canEncode(CharSequence cs)
이 메소드가 특정의 문자 순서에 대해서 false 를 돌려주는 경우는,encode 처리를 모두 실행하면, 순서가 encode 되지 않는 이유를 자세하게 조사할 수가 있습니다.
이 메소드는, 이 엔코더 상태를 변경합니다. 벌써 encode 처리가 진행되고 있는 경우는, 이 메소드를 호출하지 말아 주세요.
이 메소드의 디폴트 구현은 너무 효율이 좋지 않습니다. 일반적으로, 이 성능을 개선하기 위해서는, 오버라이드(override)가 필요합니다.
IllegalStateException
- encode 처리가 벌써 진행중인 경우
|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.