CharsetDecoder.Decode 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | 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 屬性授權中所述的詞彙使用。