<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 閱讀(1442) 評論(0)  編輯  收藏 所屬分類: JavaSE

    主站蜘蛛池模板: 久久精品免费观看国产| 两个人日本免费完整版在线观看1| 亚洲精品免费在线观看| 亚洲精品成人片在线播放| 你懂的网址免费国产| 国产精品亚洲A∨天堂不卡 | 亚洲色精品vr一区二区三区| 一级特黄录像免费播放中文版| 亚洲一区二区三区久久| xxxxwww免费| 亚洲最大中文字幕无码网站 | 亚洲人成网站在线观看播放青青| 免费一级毛片在线播放视频| 亚洲激情在线观看| 无码国产精品一区二区免费式直播 | 老妇激情毛片免费| 精品亚洲视频在线观看| 国产免费一区二区视频| 久久精品国产亚洲AV高清热| 国产精品69白浆在线观看免费| 亚洲欧美日韩一区二区三区在线| 免费国产在线观看| 中国性猛交xxxxx免费看| 亚洲国产高清在线| 最近中文字幕无吗高清免费视频| 国产精品无码亚洲精品2021| 国产成人亚洲综合| 18pao国产成视频永久免费| 亚洲精品无码国产片| 亚洲乱码中文字幕手机在线| 成全视频高清免费观看电视剧| 亚洲成无码人在线观看| 国产精品色午夜免费视频| 久久国产精品免费一区| 亚洲制服丝袜第一页| 国产国拍亚洲精品福利| 日本一卡精品视频免费| 亚洲色大成WWW亚洲女子| 亚洲色欲久久久综合网东京热| 免费观看AV片在线播放| 一个人看的在线免费视频|