語言

CharsetDecoder.Decode 方法

定義

多載

名稱 Description
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.nio.charset.CharsetDecoder.decode(java.nio.ByteBuffer)Java 檔。

此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。

適用於

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) 拋 BufferUnderflowException 出 或 BufferOverflowException。

備註

從給定的輸入緩衝區解碼盡可能多的位元組,並將結果寫入給定的輸出緩衝區。

緩衝區從目前位置開始讀取與寫入。 最多 Buffer#remaining in.remaining() 只能讀取位元組, Buffer#remaining out.remaining() 最多只能寫入字元。 緩衝區的位置會隨著讀取位元組和寫入字元而前進,但標記與限制不會被修改。

除了從輸入緩衝區讀取位元組並將字元寫入輸出緩衝區外,此方法還會回傳一個 CoderResult 物件來描述其終止原因:

<UL>

<李>

CoderResult#UNDERFLOW 表示輸入緩衝區已盡可能多地被解碼。 若無進一步輸入,呼叫者即可進入下一階段解碼操作。 否則,該方法應在進一步輸入時再次被調用。

</李>

<李>

CoderResult#OVERFLOW 表示輸出緩衝區空間不足以解碼更多位元組。 此方法應在輸出緩衝區中包含更多 Buffer#剩餘字元時再次呼叫。 這通常是透過從輸出緩衝區中抽取解碼字元來完成。

</李>

<李>

CoderResult#malformedForLength 的錯誤輸入結果表示已偵測到錯誤輸入錯誤。 錯誤的位元組從輸入緩衝區(可能遞增)的位置開始;錯誤位元組的數量可透過呼叫結果物件的方法 CoderResult#length() length 來決定。 此情況僅適用於解碼器 #onMalformedInput 錯誤動作為 ; CodingErrorAction#REPORT否則錯誤輸入將被忽略或替換,如要求。

</李>

<李>

CoderResult#unmappableForLength unmapable-character 結果表示已偵測到無法映射字元錯誤。 解碼不可標記字元的位元組從輸入緩衝區(可能遞增)的位置開始;這類位元組的數量可透過呼叫結果物件的方法 CoderResult#length() length 來決定。 此情況僅適用於解碼器 #onUnmappableCharacter 不可映射的動作為 CodingErrorAction#REPORT;否則不可映射字元將被忽略或替換,如要求而被替換。

</李>

</ul>

無論如何,若此方法需在同一解碼操作中重新呼叫,則應注意保留輸入緩衝區中剩餘的位元組,以便下一次調用時可用。

參數會 endOfInput 提示此方法,判斷呼叫者是否能提供超出給定輸入緩衝區內的進一步輸入。 若有可能提供額外輸入,呼叫者應通過 false 此參數;若無法提供進一步輸入,則呼叫者應傳遞 true。 其實很常見,只在一次祈禱中通過 false ,後來才發現其實沒有其他輸入。 然而,關鍵在於此方法在一連串呼叫中最後一次呼叫必須通過 true ,這樣任何剩下的未解碼輸入都會被視為格式錯誤。

此方法透過呼叫 #decodeLoop decodeLoop 方法、解讀結果、處理錯誤條件,並在必要時重新執行。

的 java.nio.charset.CharsetDecoder.decode(java.nio.ByteBuffer, java.nio.CharBuffer, boolean)Java 檔。

此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。

適用於