為了實現字符的編碼和解碼,java中提供了許多類‘java.nio.charset’包。這個‘字符集編碼器’該包的類執行重要的編碼任務。在本文中,讓我們了解這個類、它的語法、不同的方法以及錯誤處理和優化技術的一些示例。
什麽是 CharsetEncoder?
‘字符集編碼器’類是從導入的‘java.nio.charset’包。
該類的基本函數是使用某種字符集或稱為編碼的編碼字符集。它將字符序列轉換為字節格式。此類通常用於將文本數據寫入文件、通過網絡傳輸數據以及在不同字符編碼之間對數據進行編碼/解碼等活動。
CharsetEncoder將字符輸入轉換為字節輸出。 Java的內部字符表示通常是UTF-16,被編碼並轉換為所選字符編碼的字節表示(例如UTF-8, 等等)。
CharsetEncoder 的語法
public abstract class CharsetEncoder extends Object
CharsetEncoder 的構造函數
與 CharsetEncoder 關聯的構造函數及其說明。
構造函數 |
修飾符 |
說明 |
---|---|---|
CharsetEncoder(字符集 cs,浮點averageBytesPerChar,浮點maxBytesPerChar) |
protected |
給定字符集的新編碼器使用 CharsetEncoder 構造函數指定的每個字符的最大和平均字節進行初始化。 |
CharsetEncoder(字符集 cs,浮點averageBytesPerChar,浮點maxBytesPerChar,字節[]替換) |
protected |
給定字符集的新編碼器由 CharsetEncoder 構造函數初始化,其中包含每個字符的估計平均字節數和最大字節數以及無法映射的字符的唯一替代字節序列。 |
CharsetEncoder的方法
與 CharsetEncoder 相關的方法表及其說明。
修飾符和類型 |
方法 |
說明 |
---|---|---|
浮點數 |
averageBytesPerChar() |
返回為每個輸入字符生成的平均字節數。 |
布爾值 |
canEncode(char c) |
指示該編碼器是否可以對指定字符進行編碼。 |
布爾值 |
canEncode(CharSequence cs) |
指示該編碼器是否可以對提供的字符序列進行編碼。 |
字符集 |
charset() |
返回創建此編碼器的字符集。 |
ByteBuffer |
encode(CharBuffer in) |
將單個輸入字符緩衝區中的剩餘數據編碼到 newly-allocated 字節緩衝區中 |
CoderResult |
encode(CharBuffer in, ByteBuffer out, boolean endOfInput) |
從提供的輸入緩衝區編碼盡可能多的字符後,將結果寫入指定的輸出緩衝區。 |
受保護的摘要CoderResult |
encodeLoop(CharBuffer in, ByteBuffer out) |
將一個或多個字符編碼為一個或多個字節。 |
CoderResult |
flush(ByteBuffer out) |
衝洗編碼器。 |
受保護CoderResult |
implFlush(ByteBuffer out) |
衝洗編碼器。 |
受保護的無效 |
implReset() |
通過重置此編碼器來清除特定於給定字符集的任何內部狀態。 |
布爾值 |
isLegalReplacement(byte[] repl) |
指示提供的字節數組是否是該編碼器的有效替換值。 |
浮點數 |
maxBytesPerChar() |
返回可為每個輸入字符生成的最大字節數。 |
CharsetEncoder |
reset() |
重置編碼器,清除任何內部狀態。 |
字節[] |
replacement() |
返回該編碼器的替換值。 |
CharsetEncoder |
替換(字節[]新替換) |
修改該編碼器的替換值。 |
繼承方法
Charset 類中包含的方法繼承自java.lang.Object 。
CharEncoder 類示例
示例1:CharsetEncoder的基本使用
在此示例中,使用以下方法將輸入字符串編碼為字節:CharsetEncoder和UTF-8字符編碼。
它涵蓋了如何構造 CharsetEncoder、對字符進行編碼、將輸入文本放置在CharBuffer,然後輸出已經編碼的數據。它具有基本的錯誤處理函數,可以解決編碼過程中可能出現的任何問題。
Java
// Java Program to construct a
// CharsetEncoder using CharBuffer
import java.nio.*;
import java.nio.charset.*;
//Driver class
public class Main {
// Main method
public static void main(String[] args){
// Create a Charset
Charset ch = Charset.forName("UTF-8");
// Initialize a CharsetEncoder
CharsetEncoder ec = ch.newEncoder();
// Input string
String str = "CharsetEncoder Example";
// Wrap the input text in a CharBuffer
CharBuffer charBuffer = CharBuffer.wrap(str);
try {
// Encode the characters
ByteBuffer bf = ec.encode(charBuffer);
// Print the encoded data
String ans = new String(bf.array());
System.out.println(ans);
}
catch (Exception e) {
// Handle the exception
e.printStackTrace();
}
}
}
輸出:
CharsetEncoder Example
示例 2:錯誤處理
UTF-8字符編碼隻能對 Unicode 標準內的字符進行編碼。有些特殊字符或符號無法通過此編碼技術識別。為了防止出現問題,需要使用一些方法來處理錯誤。在下麵給出的示例中,我們給出了一個包含特殊符號的輸入字符串‘Ω’,這是不可映射的UTF-8。我們使用‘onUnmappableCharacter' 和 'CodingErrorAction.REPLACE' 用任何不同的字符替換這些不可映射的字符的方法。
在下麵的代碼中,每當我們遇到‘Ω’,它被替換為‘?‘ 表示特殊符號被替換為後備字符以進行錯誤處理。
Java
// Java Program for Error handling
// Using onUnmappableCharacter
import java.nio.*;
import java.nio.charset.*;
//Driver Class
public class Main {
//Main method
public static void main(String[] args){
// Create a Charset
Charset ch = Charset.forName("UTF-8");
// Initialize a CharsetEncoder
CharsetEncoder ec = ch.newEncoder();
// Input string (with Ω as an unmappable character)
String str = "Charset Ω Encoder";
// Handle the error by replacing the unmappable
// character with a question mark
ec.onUnmappableCharacter(CodingErrorAction.REPLACE);
ec.replaceWith("?".getBytes());
// Wrap the string into a CharBuffer
CharBuffer cb = CharBuffer.wrap(str);
try {
// Encode the characters
ByteBuffer bf = ec.encode(cb);
// Convert the ByteBuffer to a String
String ans = new String(bf.array());
System.out.println("Encoded String: " + ans);
}
catch (Exception e) {
// Handle the exception
System.err.println("Error: " + e.getMessage());
}
}
}
輸出:
Encoded String: Charset ? Encoder
如何優化編碼?
現在我們已經在以下的幫助下了解了編碼操作CharsetEncoder類中,了解如何在處理大量數據時提高效率和性能非常重要。
- 緩衝區管理:使用CharBuffer和ByteBuffer,我們可以管理數據的大小,因為它可以避免頻繁的重新分配。留出足以容納預期數據的緩衝區。我們在上麵給出的例子中討論了這種方法
- 重用緩衝區:I而不是創建新的實例CharBuffer和ByteBuffer每次,請考慮在每個編碼和解碼操作中重複使用它們。這將顯著減少內存分配。
- 批量編碼:始終使用encode()方法與CharSequence或一個CharBuffer包含所有要編碼或解碼的字符。使用此函數,編碼調用的數量將最小化,從而提高程序的效率。
- 預計算緩衝區大小:為了防止不必要的大小調整,請分配ByteBuffer如果您知道編碼數據的大致數量(以字節為單位),則具有正確的大小或更多的容量。
在本文中,我們涵蓋了與此相關的所有方法和最佳實踐CharsetEncoder類。從語法、構造函數到錯誤處理和優化技術,我們探索了如何利用此類來執行 Java 應用程序中的字符編碼任務。
相關用法
- Java java.nio.charset.Charset用法及代碼示例
- Java java.nio.charset.CoderResult用法及代碼示例
- Java java.nio.charset.CodingErrorAction用法及代碼示例
- 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.CharsetEncoder Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。