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