Java NIO學習篇之緩衝區CharSet詳解

定義:

CharSet是對java nio編碼解碼的解決方案,專門負責字符的編碼和解碼。

編碼:字符數組、字符串 ===> 字節數組。
解碼:字節數組 ==> 字符數組、字符串

API詳解:

獲取CharSet的API:

//創建一個charSet,傳入字符集名稱 比如utf-8
public static Charset forName(String charsetName)

//返回一個默認字符集的charset,UTF-8
public static Charset defaultCharset()

編碼解碼API

//解碼,把字節緩衝區解碼成字符緩衝區。
public final CharBuffer decode(ByteBuffer bb)

//編碼。把字符緩衝區編碼成字節緩衝區。
public final ByteBuffer encode(CharBuffer cb)

//編碼。把字符串編碼成字節緩衝區。
public final ByteBuffer encode(String str)

//返回一個解碼器,用於專門進行解碼。提供更多的功能。
public abstract CharsetDecoder newDecoder();

//返回一個編碼器,用於專門進行編碼。提供更多的功能。
public abstract CharsetEncoder newEncoder();

demo:

public static void testEnCodeDeCode(){

        Charset UTF8CharSet = Charset.forName("utf-8");
        Charset GBKCharSet = Charset.forName("gbk");
        String content = "我賊帥!!";
        ByteBuffer byteBuffer = UTF8CharSet.encode(content);

        //用同樣的字符集進行解碼,不會亂碼
        System.out.println("=================>>>UTF8CharSet encode, UTF8CharSet decode<<<====================");
        System.out.println(new String(UTF8CharSet.decode(byteBuffer).array()));

        byteBuffer.clear();


        //用不一樣的字符集進行解碼,亂碼
        System.out.println("=================>>>UTF8CharSet encode, GBKCharSet decode<<<====================");
        System.out.println(new String(GBKCharSet.decode(byteBuffer).array()));
    }

結果:
在這裏插入圖片描述

注意:

  1. 編碼與解碼要用一樣的字符集,不然會造成亂碼。
  2. 如果只是進行簡單的編碼解碼,無需使用專用的編碼器和解碼器,在Charset中完成就好。

其他API:

//返回字符集的名字
public final String name()

//返回字符集的名字,與name()一樣的效果。
public String displayName()

//返回是否支持傳入參數charsetName代表的字符集
public static boolean isSupported(String charsetName)

//返回此字符集是否註冊在 http://www.iana.org/assignments/character-sets   IANA字符集註冊表中。
public final boolean isRegistered();

//返回此字符集的別名的set集合。
public final Set<String> aliases()

//返回可用的字符集的集合。返回一個SortedMap結構,鍵是字符集名稱,值是代表字符集的CharSet對象。
public static SortedMap<String,Charset> availableCharsets()

//判斷兩個字符集是否相等,0相等,返回非零不相等,其實就是比較字符集的名字。忽略大小寫。
public final int compareTo(Charset that)

//返回此字符集是否支持編碼。
public boolean canEncode()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章