java.nio.charset包中提供了Charset類,它繼承了Comparable接口;還有CharsetDecoder、CharsetEncoder編碼和解碼的類,它們都是繼承Object類。
Java中的字符使用Unicode編碼,每個字符占用兩個字節,16個二進制位,向ByteBuffer中存放數據的時候需要考慮字符的編碼,從中讀取的時候也需要考慮字符的編碼方式,也就是編碼和解碼。
1.獲取字符集有如下兩種方式
//返回指定的字符集CharSet Charset charset = Charset.forName("utf8"); //返回虛擬機默認的字符集CharSet Charset charset = Charset.defaultCharset();
2.接下來我們使用字符集CharSet創建一個編碼器和一個解碼器
//編碼器 CharsetEncoder encoder = charset.newEncoder(); //解碼器 CharsetDecoder decoder = charset.newDecoder();
3.使用編碼器和解碼器解析數據
//編碼,傳入CharBuffer ByteBuffer bytebuffer = encoder.encode(in); //解碼,傳入ByteBuffer CharBuffer charbuffer = decoder.decode(in);
4.具體使用案例
public static void main(String[] args) { Charset charset = Charset.forName("utf8"); System.out.println(charset.name()+"--"+charset.canEncode()); //返回一個包含該字符的別名,字符集的別名是不可變的 Set<String> set = charset.aliases(); Iterator<String> it = set.iterator(); while(it.hasNext()) { System.out.println(it.next()); } System.out.println("----------編碼----------------"); ByteBuffer buffer = charset.encode("sdf"); System.out.println(buffer); System.out.println("緩沖區剩余的元素數--"+buffer.remaining()); while(buffer.hasRemaining()) { System.out.println((char)buffer.get()); } System.out.println("緩沖區剩余的元素數--"+buffer.remaining()); System.out.println("----------解碼----------------"); //清空緩沖區,將限制設置恢復,如果定義了標記,則將它們丟棄 buffer.flip(); }