‘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(),這使得監視編碼或解碼操作的進度變得容易。這些方法使開發人員可以根據特定操作的結果有條件地運行代碼。
- 緩衝區管理:通過指示是否有
- 下溢(源緩衝區輸入不足),
- 溢出(目標緩衝區空間不足),
- 或其他錯誤情況,它有助於緩衝區管理。
這有助於開發人員采取正確的步驟,例如調整緩衝區大小或自定義錯誤處理
相關用法
- Java java.nio.charset.CodingErrorAction用法及代碼示例
- Java java.nio.charset.CharsetEncoder用法及代碼示例
- Java java.nio.charset.Charset用法及代碼示例
- Java java.nio.channels.spi.SelectorProvider用法及代碼示例
- Java java.nio.channels.spi.AsynchronousChannelProvider用法及代碼示例
- Java java.nio.channels.Selector用法及代碼示例
- Java java.nio.ByteBuffer用法及代碼示例
- Java java.nio.IntBuffer用法及代碼示例
- Java java.nio.file.FileStore用法及代碼示例
- Java java.nio.FloatBuffer用法及代碼示例
- Java java.nio.file.LinkPermission用法及代碼示例
- Java java.nio.ShortBuffer用法及代碼示例
- Java java.nio.DoubleBuffer用法及代碼示例
- Java java.nio.file.attribute.AclEntry用法及代碼示例
- Java java.nio.LongBuffer用法及代碼示例
- Java java.nio.file.spi.FileTypeDetector用法及代碼示例
- Java java.nio.ByteOrder用法及代碼示例
- Java java.nio.file.attribute.FileTime用法及代碼示例
- Java java.nio.file.SimpleFileVisitor用法及代碼示例
- Java java.nio.file.FileSystems用法及代碼示例
- Java java.nio.CharBuffer用法及代碼示例
- Java java.nio.Buffer用法及代碼示例
- Java java.nio.file.FileSystem用法及代碼示例
- Java java.nio.file.Paths用法及代碼示例
- Java java.net.SocketException用法及代碼示例
注:本文由純淨天空篩選整理自abhinav_m22大神的英文原創作品 java.nio.charset.CoderResult Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。