當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java java.nio.charset.CoderResult用法及代碼示例


‘java.nio.charset’Java 中的包包含用於字符編碼和解碼的類。這CoderResult類用於確定編碼或解碼操作的結果。

在開始之前,我們先回顧一下字符編碼和解碼背後的想法CoderResult.

  • 將字符從一種表示形式轉換為另一種表示形式(通常從人類可讀格式轉換為可傳輸或存儲的格式)的過程稱為字符編碼.
  • 字符解碼是將編碼字符返回到其原始狀態的相反過程。

CoderResult類是 Java NIO(新 I/O)包的一部分,用作報告由對象執行的編碼操作的結果的機製。CharsetEncoder或者CharsetDecoder.

  • 它提供了一種通過顯示成功和失敗場景來處理這些操作結果的方法。
  • CoderResult 實例除了用作編碼或解碼操作的狀態指示器之外,還可以保存有關輸入和輸出緩衝區中位置的額外信息。

Note: java.nio.charset package was introduced in Java 1.4 to improve character set and character encoding handling

CoderResult 的類聲明

public class CoderResult extends Object

CoderResult 類聲明的語法是一個可公開訪問的類,並且隱式繼承自 Object 類,該類是所有 Java 類的根類。

  • 基本方法如equals()toString()由擴展對象提供,因此 CoderResult 類的實例可以訪問這些函數。

CoderResult 的字段

以下是 CoderResult 類提供的字段:

修飾符和類型

場地

說明

靜態CoderResult

OVERFLOW

溢出結果對象表明輸出緩衝區中沒有足夠的空間。

靜態CoderResult

UNDERFLOW

指示下溢的結果對象,這表明如果輸入緩衝區尚未為空或已完全消耗,則需要更多輸入。

CoderResult類的方法

以下是 CoderResult 類支持的關鍵方法,以確保有效處理編碼和解碼結果。

修飾符和類型

說明

布爾值

isError()

指示該對象是否代表錯誤情況。

布爾值

isMalformed()

指示相關對象是否表示格式錯誤的輸入錯誤。

布爾值

isOverflow()

顯示對象是否代表溢出情況。

布爾值

isUnderflow()

顯示對象是否代表下溢情況。

布爾值

isUnmappable()

表示對象是否對應於不可映射的字符錯誤。

int

length()

它返回該對象(可選操作)說明的錯誤輸入的長度。

靜態CoderResult

malformedForLength(int length)

靜態工廠方法,提供表達給定長度格式錯誤的輸入錯誤的唯一對象。

空白

throwException()

它拋出一個適合該對象說明的結果的異常。

String

toString()

返回說明編碼器結果的字符串。

靜態CoderResult

unmappableForLength(int length)

此靜態工廠方法返回說明指定長度的 unmappable-character 錯誤的唯一結果對象。

CoderResult類的方法也繼承自java.lang.Object類。

Java 中的示例CoderResult 類

這個Java程序使用CoderResult用於字符編碼的類。對於 UTF-8 編碼,它初始化一個字符集和匹配CharsetEncoder.

  • 輸入緩衝區中包含的字符串“GeeksforGeeks,”
  • 然後輸入緩衝區被編碼到先前分配的輸出緩衝區中。
  • 要驗證編碼結果,請使用CoderResult對象。

Java


// Java program to demonstrate the use of CoderResult class 
  
import java.nio.ByteBuffer; 
import java.nio.CharBuffer; 
import java.nio.charset.CharacterCodingException; 
import java.nio.charset.Charset; 
import java.nio.charset.CharsetEncoder; 
import java.nio.charset.CoderResult; 
  
public class Coder { 
  
    // Main method 
    public static void main(String[] args) 
    { 
        try { 
            
            // Initialize the charset and encoder 
            Charset charset = Charset.forName("UTF-8"); 
            CharsetEncoder encoder = charset.newEncoder(); 
  
            // Create the input and output buffers for encoding 
            CharBuffer inputBuffer= CharBuffer.wrap("GeeksforGeeks"); 
            ByteBuffer outputBuffer= ByteBuffer.allocate(20); 
  
            // Encode the input buffer into the output buffer 
            CoderResult result = encoder.encode( 
                inputBuffer, outputBuffer, true); 
  
            // Check if encoding is successful 
            if (result.isUnderflow()) { 
                
                // Print the output buffer 
                System.out.println("Encoding successful: "
                                   + outputBuffer.flip()); 
            } 
            
            // Check for overflow condition 
            else if (result.isOverflow()) { 
                
                // Print the error message 
                System.err.println( 
                    "Output buffer overflow"); 
            } 
            
            // Check for error condition 
            else { 
                result.throwException(); 
            } 
        } 
        // Catch the exception 
        catch (CharacterCodingException e) { 
            e.printStackTrace(); 
        } 
    } 
}
輸出
Encoding successful: java.nio.HeapByteBuffer[pos=0 lim=13 cap=20]



上述程序的解釋:

  • 為了編碼 UTF-8 數據,應用程序初始化一個字符集實例和一個CharsetEncoder.
  • 為了存儲編碼結果和輸入字符串,創建了分別稱為 inputBuffer 和 outputBuffer 的字符緩衝區和字節緩衝區。
  • 要將輸入緩衝區中的字符編碼到輸出緩衝區中,CharsetEncoder 的encode()方法被調用。
  • 要驗證編碼過程的結果,請使用CoderResult對象(結果)。
  • 它首先查找下溢(成功編碼)、溢出(輸出緩衝區空間不足)和錯誤。

如果編碼過程成功,則翻轉輸出緩衝區以打印編碼結果。如果輸出緩衝區沒有足夠的空間,則會打印一條錯誤消息。這throwException()的方法CoderResult在編碼錯誤的情況下觸發,拋出CharacterCodingException。 catch 塊處理此異常並打印堆棧跟蹤。

CoderResult 類的用途

現在我們對這個類有了基本的了解,讓我們看看一些實際的use-cases,以便更好地理解它。

  • 結果報告:要報告字符編碼和解碼操作的結果,請使用CoderResult。它包含有關操作是否成功、遇到錯誤或遇到特定問題(例如緩衝區溢出)的詳細信息
  • 錯誤處理:CoderResult提供異常處理機製,以防編碼或解碼過程中出現錯誤。開發者可以通過調用throwException()方法拋出CharacterCodingException來優雅地處理和響應編碼或解碼錯誤
  • 與字符集 API 集成:它可以輕鬆地與 CharsetEncoder 和 CharsetDecoder 這兩個類進行交互java.nio.charset包。為了傳達編碼和解碼嘗試的結果,這些類使用 CoderResult 實例
  • 狀態檢查:CoderResult 類提供了許多方法,包括isUnderflow()、isOverflow()、isMalformed()、 isUnmappable(),這使得監視編碼或解碼操作的進度變得容易。這些方法使開發人員可以根據特定操作的結果有條件地運行代碼。
  • 緩衝區管理:通過指示是否有
    • 下溢(源緩衝區輸入不足),
    • 溢出(目標緩衝區空間不足),
    • 或其他錯誤情況,它有助於緩衝區管理。

這有助於開發人員采取正確的步驟,例如調整緩衝區大小或自定義錯誤處理



相關用法


注:本文由純淨天空篩選整理自abhinav_m22大神的英文原創作品 java.nio.charset.CoderResult Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。