<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Flyingis

    Talking and thinking freely !
    Flying in the world of GIS !
    隨筆 - 156, 文章 - 16, 評論 - 589, 引用 - 0
    數據加載中……

    Java I/O中的數據編碼轉換

    作者:Flyingis

          JDK1.4
    開始便引入了java.nio.*包,其目的在于提高I/O的速度,這是因為該類庫使用的結構更接近于操作系統執行I/O的方式,即通過通道和緩沖器來讀寫數據。在實際應用中,和我們直接交互的是緩沖器,然后把緩沖器派送到通道,通道要么從緩沖器獲得數據,要么向緩沖器發送數據。


        在基于
    Java的各種開發中,字符編碼是常見的問題之一,在最基本的Java I/O中也存在這種問題。新的Java I/O通過通道和緩沖器來讀寫數據,緩沖器容納的是普通的字節,為了把它們轉換成字符,我們要么在輸入的時候對其進行編碼,要么在從緩沖器輸出時對它們進行解碼。


    import java.io.*;

    import java.nio.*;

    import java.nio.channels.*;

    import java.nio.charset.*;

    public class ByteToCharacter {

      private static final int SIZE = 1024;

      public static void main(String[] args) throws Exception {

    FileChannel fc = new FileOutputStream(“Output.txt”).getChannel();

    ByteBuffer buffer = ByteBuffer.allocate(SIZE);

    /**

    * 在輸入的時候進行編碼方式一

    */

    fc.write(ByteBuffer.wrap(“Good holiday!”.getBytes(“UTF-16BE”)));  // UTF-16BE可以更換為其他編碼方式

    fc.close();

    fc = new FileInputStream(“Output.txt”).getChannel();

    fc.read(buffer);

    buffer.flip();  //準備從緩沖區讀取已經寫入的數據

    System.out.println(buffer.asCharBuffer());

    /**

    * 在輸入的時候進行編碼方式二

    * 通過asCharBuffer()方法直接以char形式將字符寫入

    */

    fc = new FileOutputStream(“Output.txt”).getChannel();

    buffer.clear();

    buffer.asCharBuffer.put(“Good holiday has passed!”);

    fc.write(buffer);

    fc.close();

    fc = new FileInputStream(“Output.txt”).getChannel();

    buffer.clear();

    fc.read(buffer);

    buffer.flip();

    System.out.println(buffer.asCharBuffer());

    /**

    * 從緩沖器輸出時進行編碼

    */

    fc = new FileOutputStream(“Output.txt”).getChannel();

    fc.write(ByteBuffer.wrap(“Once again!”.getBytes()));

    fc.close();

    fc = new FileInputStream(“Output.txt”).getChannel();

    buffer.clear();

    fc.read(buffer);

    buffer.flip();

    String encode = System.getProperty(“file.encoding”);  // 平臺缺省字符集,更加通用的方法,跨平臺特性的體現之一

    System.out.println(Charset.forName(encode).decode(buffer));

    }

    }


       
    在上述代碼中,如果不對從緩沖器寫入的數據進行正確編碼,那么當再次通過緩沖器讀取這些數據時,將不能顯示任何所需要的數據。


        JDK
    中的java.nio.charset.Charset類提供了把數據編碼成多種不同類型的字符集的工具,滿足在各種應用中的編碼需求。

    posted on 2006-01-03 14:02 Flyingis 閱讀(1436) 評論(0)  編輯  收藏 所屬分類: JavaSE

    主站蜘蛛池模板: 免费一级e一片在线播放| 国产精品亚洲产品一区二区三区| 亚洲一本一道一区二区三区| 国产一精品一aⅴ一免费| AAA日本高清在线播放免费观看| 久久久无码精品亚洲日韩京东传媒| 最近中文字幕免费mv视频7| 免费国产污网站在线观看不要卡| 亚洲av无码av制服另类专区| 成人毛片18女人毛片免费视频未| 日韩在线视频免费| 亚洲精品亚洲人成在线观看麻豆 | 久久免费精彩视频| 亚洲AV无码AV吞精久久| 国产亚洲婷婷香蕉久久精品 | 免费黄色电影在线观看| 亚洲AV无码国产一区二区三区| 亚洲色欲一区二区三区在线观看 | 久久精品国产96精品亚洲| 欧美日韩国产免费一区二区三区| 国产日韩AV免费无码一区二区三区 | 国产精品亚洲综合一区| 最新欧洲大片免费在线| 中国国产高清免费av片| 日韩在线视精品在亚洲| 亚洲国产综合自在线另类| 最新亚洲成av人免费看| 国产99视频精品免费视频7| 亚洲视频在线免费播放| a成人毛片免费观看| 真正全免费视频a毛片| 亚洲午夜无码毛片av久久京东热| 亚洲嫩模在线观看| 亚洲人成网77777亚洲色| 国产亚洲精品免费| 在线免费观看一级毛片| 免费观看激色视频网站bd| 久久免费线看线看| 好湿好大好紧好爽免费视频| 亚洲爆乳成av人在线视菜奈实| 亚洲一区在线观看视频|