CharsetDecoder.Decode 方法

定义

重载

名称 说明
Decode(ByteBuffer)

将单个输入字节缓冲区的剩余内容解码为新分配的字符缓冲区的便利方法。

Decode(ByteBuffer, CharBuffer, Boolean)

从给定输入缓冲区解码尽可能多的字节,并将结果写入给定的输出缓冲区。

Decode(ByteBuffer)

将单个输入字节缓冲区的剩余内容解码为新分配的字符缓冲区的便利方法。

[Android.Runtime.Register("decode", "(Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer;", "")]
public Java.Nio.CharBuffer? Decode(Java.Nio.ByteBuffer? in);
[<Android.Runtime.Register("decode", "(Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer;", "")>]
member this.Decode : Java.Nio.ByteBuffer -> Java.Nio.CharBuffer

参数

in
ByteBuffer

输入字节缓冲区

返回

包含解码操作结果的新分配字符缓冲区。 缓冲区的位置将为零,其限制将遵循写入的最后一个字符。

属性

例外

如果正在进行另一个解码操作,

如果遇到此字符集的非法输入字节序列,并且错误操作为 Report

如果遇到此字符集的合法但无法应用的输入字节序列,并且无法应用字符错误的操作是 Report。 不可应用意味着输入缓冲区当前位置的字节序列无法映射到 Unicode 字符序列。

如果在解码操作期间发生另一个异常,

注解

将单个输入字节缓冲区的剩余内容解码为新分配的字符缓冲区的便利方法。

此方法实现整个解码操作;也就是说,它会重置此解码器,然后解码给定字节缓冲区中的字节,最后刷新此解码器。 因此,如果解码操作正在进行,则不应调用此方法。

Java文档java.nio.charset.CharsetDecoder.decode(java.nio.ByteBuffer)

本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。

适用于

Decode(ByteBuffer, CharBuffer, Boolean)

从给定输入缓冲区解码尽可能多的字节,并将结果写入给定的输出缓冲区。

[Android.Runtime.Register("decode", "(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult;", "")]
public Java.Nio.Charset.CoderResult? Decode(Java.Nio.ByteBuffer? in, Java.Nio.CharBuffer? out, bool endOfInput);
[<Android.Runtime.Register("decode", "(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult;", "")>]
member this.Decode : Java.Nio.ByteBuffer * Java.Nio.CharBuffer * bool -> Java.Nio.Charset.CoderResult

参数

in
ByteBuffer

输入字节缓冲区

out
CharBuffer

输出字符缓冲区

endOfInput
Boolean

true 如果,并且仅当调用程序不能提供超出给定缓冲区的输入字节以外的其他输入字节时

返回

描述终止原因的编码器结果对象

属性

例外

如果解码已启动,或者在此解码进度中不需要更多输入,

DecodeLoop(ByteBuffer, CharBuffer)如果方法引发BufferUnderflowExceptionBufferOverflowException

注解

从给定输入缓冲区解码尽可能多的字节,并将结果写入给定的输出缓冲区。

从缓冲区当前位置开始读取缓冲区并写入缓冲区。 最多 Buffer#remaining in.remaining() 将读取字节,并且最多 Buffer#remaining out.remaining() 写入字符。 缓冲区的位置将进行高级以反映读取的字节和写入的字符,但不会修改它们的标记和限制。

除了从输入缓冲区读取字节并将字符写入输出缓冲区之外,此方法还返回一个 CoderResult 对象来描述其终止原因:

<ul>

<li>

CoderResult#UNDERFLOW 指示已解码尽可能多的输入缓冲区。 如果没有进一步的输入,调用程序可以继续执行解码操作的下一步。 否则,应使用进一步输入再次调用此方法。

</li>

<li>

CoderResult#OVERFLOW 指示输出缓冲区中空间不足,无法解码更多字节。 应使用具有更多 Buffer#剩余字符的输出缓冲区再次调用此方法。 这通常是通过从输出缓冲区中清空任何解码的字符来完成的。

</li>

<li>

CoderResult#malformedForLength 格式不正确的输入结果指示检测到格式不正确的输入错误。 格式不正确的字节从输入缓冲区(可能递增)位置开始;格式不正确的字节数可以通过调用结果对象的 CoderResult#length() length 方法来确定。 仅当此解码器的 CodingErrorAction#REPORT#onMalformedInput 格式不正确操作时,此情况才适用;否则,将按请求忽略或替换格式不正确的输入。

</li>

<li>

CoderResult#unmappableForLength unmappable-character 结果指示检测到不可应用字符错误。 解码不可应用字符的字节从输入缓冲区(可能递增)位置开始;可以通过调用结果对象的 CoderResult#length() length 方法来确定此类字节的数目。 此情况仅适用于此解码器的 CodingErrorAction#REPORT#onUnmappableCharacter 不可应用操作;否则,将按请求忽略或替换不可应用字符。

</li>

</ul>

在任何情况下,如果要在同一解码操作中重新调用此方法,则应小心保留输入缓冲区中剩余的任何字节,以便它们可供下一次调用使用。

endOfInput 参数建议此方法,即调用方是否可以提供超出给定输入缓冲区中包含的进一步输入。 如果有可能提供其他输入,则调用程序应传递 false 此参数;如果没有提供进一步输入的可能性,则调用程序应传递 true。 这不是错误的,事实上,传递一个调用是相当常见的, false 后来发现没有进一步的输入实际可用。 但是,在一系列调用中对此方法的最终调用始终传递 true 至关重要,以便将任何剩余未编码的输入视为格式不正确。

此方法的工作原理是调用 #decodeLoop decodeLoop 该方法、解释其结果、处理错误条件以及根据需要重新调用它。

Java文档java.nio.charset.CharsetDecoder.decode(java.nio.ByteBuffer, java.nio.CharBuffer, boolean)

本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。

适用于