|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.nio.charset
类 CharsetDecoder
java.lang.Object java.nio.charset.CharsetDecoder
-
public abstract class CharsetDecoder
- extends Object
能够把特定 charset 中的字节序列转换成 16 位 Unicode 字符序列的引擎。
输入字节序列由字节缓冲区或一系列这样的缓冲区提供。输出字符序列写入字符缓冲区或一系列这样的缓冲区。应该始终通过下面的方法调用序列使用解码器,下文称为解码操作:
只要有其他的输入数据就应零次或多次调用
decode
,为 endOfInput 参数传递 false,在调用之间填充输入缓冲区并刷新输出缓冲区。最后时刻调用一次
decode
方法,为 endOfInput 参数传递 true;然后调用
flush
方法,这样解码器能够将任何内部状态刷新到输出缓冲区。
decode
方法将解码尽可能多的输入缓冲区中的字节,将得到的字符写入输出缓冲区。当需要更多的输入时、输出缓冲区没有足够的空间或出现解码错误时,decode
方法返回。在每种情况下都返回用于描述终止原因的 CoderResult
对象。调用者可根据相应的状况检查此对象并填充输入缓冲区、刷新输出缓冲区或尝试从解码错误中恢复,并再次进行尝试。
有两种常规解码错误类型。如果输入字节序列对此 charset 来说是不合法的,那么就认为输入是错误的。如果输入字节序列是合法的,但不能映射为有效的 Unicode 字符,那么就出现了不可映射的字符。
如何处理解码错误取决于为该错误类型所请求的操作,在 CodingErrorAction
类的实例中描述了该类型的错误。可能的错误操作是忽略
错误的输入、通过返回的
CoderResult
对象将错误报告
给调用者,或者用当前的替换字符串值
CodingErrorAction#REPLACE
替换错误的输入。 该替换字符串的初始值是 "FD"; 可通过
replaceWith
方法更改此值。
对于错误输入和不可映射的字符错误的默认操作是报告
它们。可通过
onMalformedInput
方法更改针对错误输入的错误操作;可通过 onUnmappableCharacter
方法更改不可映射字符错误的操作。
此类设计用来处理解码过程中的许多细节问题,包括错误操作的实现。一个特定 charset 的解码器是此类的具体子类,它只需要实现抽象的 decodeLoop
方法,这个方法封装了基本的解码循环。另外,维护内部状态的子类应该重写 flush
和 reset
方法。
此类的实例用于多个并发线程是不安全的。
- 从以下版本开始:
- 1.4
- 另请参见:
-
ByteBuffer
,CharBuffer
,Charset
,CharsetEncoder
构造方法摘要 | |
---|---|
protected |
CharsetDecoder(Charset cs, float averageCharsPerByte, float maxCharsPerByte) 初始化新的解码器。 |
方法摘要 | |
---|---|
float |
averageCharsPerByte() 返回为每个输入字节生成的平均字符数。 |
Charset |
charset() 返回创建此解码器的 charset。 |
CharBuffer |
decode(ByteBuffer in) 把单个输入字节缓冲区的剩余内容解码到新分配的字符缓冲区的便捷方法。 |
CoderResult |
decode(ByteBuffer in, CharBuffer out, boolean endOfInput) 从给定的输入缓冲区中解码尽可能多的字节,把结果写入给定的输出缓冲区。 |
protected abstract CoderResult |
decodeLoop(ByteBuffer in, CharBuffer out) 将一个或多个字节解码为一个或多个字符。 |
Charset |
detectedCharset() 检索此解码器检测到的 charset(可选操作)。 |
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() 重置此解码器,清除所有特定于 charset 的内部状态。 |
boolean |
isAutoDetecting() 通知此解码器是否实现了自动检测 charset。 |
boolean |
isCharsetDetected() 通知此解码器是否已经检测到了一个 charset(可选操作)。 |
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 |
构造方法详细信息 |
---|
CharsetDecoder
protected CharsetDecoder(Charset cs, float averageCharsPerByte, float maxCharsPerByte)
-
初始化新的解码器。新的解码器具有给定的每字节多少个字符 (chars-per-byte) 值,它的替换值是字符串 "\uFFFD"。
- 参数:
-
averageCharsPerByte
- 一个正的 float 值,指示为每个输入字节所生成的字符数 -
maxCharsPerByte
- 一个正的 float 值,指示为每个输入字节所生成的最大字符数 - 抛出:
-
IllegalArgumentException
- 如果参数有关的前提不成立
方法详细信息 |
---|
charset
public final Charset charset()
- 返回创建此解码器的 charset。
-
- 返回:
- 此解码器的 charset
replacement
public final String replacement()
- 返回此解码器的替换值。
-
- 返回:
- 返回此解码器的当前替换值,它永远不能为 null,也不能为空
replaceWith
public final CharsetDecoder replaceWith(String newReplacement)
-
更改此解码器的替换值。
此方法调用
implReplaceWith
方法,检查新的替换值是可接受的后,传递该新替换值。 -
- 参数:
-
newReplacement
- 新替换值;一定不能为 null 且长度必须为非零 - 返回:
- 此解码器
- 抛出:
-
IllegalArgumentException
- 如果参数有关的前提不成立
implReplaceWith
protected void implReplaceWith(String newReplacement)
-
报告此解码器替换值的更改。
此方法的默认实现不执行任何操作。需要通知替换值更改的解码器应该重写此方法。
-
- 参数:
-
newReplacement
-
malformedInputAction
public CodingErrorAction malformedInputAction()
- 返回此解码器对错误输入错误的当前操作。
-
- 返回:
- 当前的错误输入操作,它永远不能为 null
onMalformedInput
public final CharsetDecoder onMalformedInput(CodingErrorAction newAction)
-
更改此解码器对错误输入错误的操作。
此方法调用
implOnMalformedInput
方法,传递新的操作。 -
- 参数:
-
newAction
- 新的操作;一定不能为 null - 返回:
- 此解码器
- 抛出:
-
IllegalArgumentException
- 如果参数有关的前提不成立
implOnMalformedInput
protected void implOnMalformedInput(CodingErrorAction newAction)
-
报告此解码器的错误输入操作的更改。
此方法的默认实现不执行任何操作。需要通知错误输入操作更改的解码器应该重写此方法。
-