91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中的編碼轉化方式有哪些

發布時間:2022-01-05 11:53:51 來源:億速云 閱讀:199 作者:iii 欄目:大數據

這篇文章主要介紹“java中的編碼轉化方式有哪些”,在日常操作中,相信很多人在java中的編碼轉化方式有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java中的編碼轉化方式有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一、編碼轉換原理

1、為什么需要編碼

很早之前計算機存儲的就只是英文,一共26個英文字母。而且計算機存儲信息的最小單位是一個字節8位,能夠表示256個字符。這對于早起的英文來說足夠了。即使是加上一些常見符號也足夠。

后來隨著時間的發展,中國、日本等國的計算機也開始蓬勃發展,于是計算機不僅僅要存儲英文了,也開始存儲中文了。但是中文我們都知道幾萬個太多了,一個字節肯定放不下。怎么辦呢?一個字節表示不下,那就多用幾個字節就好了。這幾個字節在存儲的時候還要再轉化為bit,這時候就要涉及到編碼了。 

2、編碼方式

計算中提供了多種編碼方式,常見的有 ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16 等。它們規定了轉化的規則,按照這個規則就可以讓計算機正確的表示我們的字符。

像GB2312、GBK、UTF-8、UTF-16等很多種方式都可以表示漢字,他們有什么區別呢?

(1)GB2312

它是雙字節編碼,總的編碼范圍是 A1-F7,其中從 A1-A9 是符號區,總共包含 682 個符號,從 B0-F7 是漢字區,包含 6763 個漢字。

(2)GBK

它的編碼范圍是 8140~FEFE(去掉 XX7F)總共有 23940 個碼位,它能表示 21003 個漢字。

(3)UTF-8

而 UTF-8 采用了一種變長技術,每個編碼區域有不同的字碼長度。不同類型的字符可以是由 1~6 個字節組成。 

3、轉碼方式**

(1)IO流

這里就是面試問題的核心答案了,編碼的目的上面已經說了,主要是字節和字符之間的轉化。既然涉及到字節和字符很容易我們就能想到java中的IO流。也就是說java中編碼的轉換其實就是IO流中的類來實現的。

java中的編碼轉化方式有哪些

最核心的就是上面幾個類,當然這里只是給出了輸入的一部分,還有一些輸出的類。

(2)String

String類中也提供了一些轉碼的方法。下面我們會通過實例來說明。為什么String可以實現呢?這是因為String底層保存的其實就是一個一個字節,而且String還有方法直接轉化為字符。所以String肯定也能實現。

(3)Charset

這個Charset是javaNIO中的一個類,整個流程就是讀取數據,然后轉化為byte,也就是字符。然后重新編碼成字符就OK了。

下面我們使用代碼來實現一下: 

二、代碼實現

1、IO流

    public void convertionFile() throws IOException {
        File file = new File("D://fdd/java的架構師技術棧.txt");
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader inReader = new InputStreamReader(fis, "gbk");
        FileOutputStream fos = new FileOutputStream(file);
        OutputStreamWriter outReader = new OutputStreamWriter(fos, "utf-8");
    }
    

2、String

    public void convertionString() throws UnsupportedEncodingException {
        String s = "java的架構師技術棧";
        // 正常情況下轉碼的過程
        byte[] b = s.getBytes("gbk");// 編碼
        String sa = new String(b, "gbk");// 解碼
        System.out.println(sa);
        // 錯誤狀態下轉碼的過程
        b = sa.getBytes("utf-8");// 編碼
        sa = new String(b, "utf-8");// 解碼
        System.err.println(sa);
    }
   

3、Charset

    public void convertionCharset() throws IOException {
        Charset charset = StandardCharsets.UTF_8;
        // 從字符集中創建相應的編碼和解碼器
        CharsetEncoder encoder = charset.newEncoder();
        CharsetDecoder decoder = charset.newDecoder();
        // 構造一個buffer
        CharBuffer charBuffer = CharBuffer.allocate(64);
        charBuffer.put('A');
        charBuffer.flip();
        // 將字符序列轉換成字節序列
        ByteBuffer bb = encoder.encode(charBuffer);
        // 將字節序列轉換成字符序列
        bb.flip();
        CharBuffer cb = decoder.decode(bb);
    }

到此,關于“java中的編碼轉化方式有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安远县| 榆林市| 周宁县| 许昌县| 慈溪市| 阳曲县| 鹤庆县| 海伦市| 昌乐县| 霍山县| 罗田县| 勐海县| 白朗县| 张家川| 龙山县| 奇台县| 香港| 饶河县| 英德市| 鹤山市| 云阳县| 中宁县| 色达县| 广丰县| 郎溪县| 阳东县| 偏关县| 页游| 仁化县| 东台市| 简阳市| 集贤县| 平果县| 育儿| 开远市| 通化市| 贡觉县| 顺平县| 田阳县| 灵武市| 张掖市|