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

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

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

    yxhxj2006

    常用鏈接

    統計

    最新評論

    字節流與字符流轉換

    字節流與字符流之間的區別卻可以聯系起來,這就是表中的兩個類InputStreamReader和OutputStreamWriter。InputStreamReader負責把字節輸入流轉換為字符輸入流,OutputStreamWriter負責把輸出字節流轉換為輸出字符流。下面來看看如何進行轉換。

    1.字節輸入流轉換為字符輸入流

    InputStreamReader是字節流通向字符流的橋梁,它使用指定的charset讀取字節并將其解碼為字符。它擁有一個InputStream類型的變量,并繼承了Reader,使用了對象的適配器模式,如圖12-9所示。

      

    根據InputStream的實例創建InputStreamReader的方法有4種:

    1. InputStreamReader(InputStream in);                
    2. //根據默認字符集創建  
    3. InputStreamReader(InputStream in, Charset cs);        
    4. //使用給定字符集創建  
    5. InputStreamReader(InputStream in, CharsetDecoder dec);    
    6. //使用給定字符集解碼器創建  
    7. InputStreamReader(InputStream in, String charsetName);    
    8. //使用指定字符集創建 

    后面的3個構造函數都指定了一個字符集,最后一個是最簡單的,可以直接指定字符集的名稱來創建,例如GB2312等。

    每次調用InputStreamReader中的一個read()方法都會導致從底層輸入流讀取一個或多個字節。要啟用從字節到字符的有效轉換,可以提前從底層流讀取更多的字節,使其超過滿足當前讀取操作所需的字節。共有3個可用的read()方法:

    1. int read();                               
    2. //讀取單個字符  
    3. int read(char[] cbuf, int offset, int length);            
    4. //將字符讀入數組中的某一部分  
    5. boolean ready();                              
    6. //判斷此流是否已經準備好用于讀取 

    InputStreamReader繼承自Reader,因此該類的實例可以被各種輸入字符流包裝。為了達到最高效率,可以考慮在BufferedReader內包裝InputStreamReader。例如程序12-20所示,我們首先創建了一個FileInputStream類的實例,然后轉換為InputStreamReader對象is,最后使用BufferedReader進行包裝。這樣就可以將字節流轉換為帶緩沖功能的字符流。

    程序12-20  TestInputStreamReader.java

    1. public class TestInputStreamReader {  
    2.     public static void main(String[] args) {  
    3.         try {  
    4. // 創建輸入流  
    5. FileInputStream fis = new FileInputStream("D:/demo/test.txt");  
    6. InputStreamReader is = new InputStreamReader(fis);  
    7. BufferedReader bis = new BufferedReader(is);  
    8.  
    9. // 從輸入流讀取數據  
    10. while (bis.ready()) {  
    11.     int c = bis.read();  
    12.     System.out.print((char)c);  
    13. }  
    14.  
    15. // 關閉輸入流  
    16. bis.close();  
    17. is.close();  
    18. fis.close();  
    19.         } catch (IOException e) {  
    20.         }  
    21.     }  

    2.字節輸出流轉換為字符輸出流

    OutputStreamWriter是字符流通向字節流的橋梁,可使用指定的charset將要寫入流中的字符編碼成字節。因此,它擁有一個OutputStream類型的變量,并繼承了Writer,使用了對象的適配器模式,如圖12-10所示。

       

    根據OutputStream的實例創建OutputStreamWriter的方法有4種:

    1. OutputStreamReader(OutputStream out);                     
    2. //根據默認字符集創建  
    3. OutputStreamReader(OutputStream out, Charset cs);                 
    4. //使用給定字符集創建  
    5. OutputStreamReader(OutputStream out, CharsetDecoder dec);         
    6. //使用給定字符集解碼器創建  
    7. OutputStreamReader(OutputStream out, Stroutg charsetName);        
    8. //使用指定字符集創建 

    后面的3個構造函數都制定了一個字符集,最后一個是最簡單的,可以直接指定字符集的名稱來創建,例如GB2312等。

    每次調用write()方法都會導致在給定字符(或字符集)上調用編碼轉換器。在寫入底層輸出流之前,得到的這些字節將在緩沖區中累積。可以指定此緩沖區的大小,不過,默認的緩沖區對多數用途來說已足夠大。注意,傳遞給write()方法的字符沒有緩沖。共有3個可用的write()方法:

    1. void write(char[] cbuf, int off, int len);//寫入字符數組的某一部分  
    2. void write(int c);//寫入單個字符  
    3. void write(String str, int off, int len);//寫入字符串的某一部分 

    OutputStreamWriter繼承自Writer,因此該類的實例可以被各種輸出字符流包裝。為了達到最高效率,可以考慮在BufferedWriter內包裝OutputStreamWriter。例如程序12-21所示,我們首先創建了一個FileOutputStream類的實例,然后轉換為OutputStreamReader對象os,最后使用BufferedWriter進行包裝。這樣就可以將字節流轉換為帶緩沖功能的字符流。

    程序12-21  TestOutputStreamWriter.java

    1. public class TestOutputStreamWriter {  
    2. public static void main(String[] args) {  
    3. try {  
    4. // 創建輸出流  
    5. FileOutputStream fos = new FileOutputStream("D:/demo/test.txt");  
    6. OutputStreamWriter os = new OutputStreamWriter(fos);  
    7. BufferedWriter bos = new BufferedWriter(os);  
    8.  
    9. // 寫入數組數據  
    10. char[] buf = new char[3];  
    11. buf[0] = 'a';  
    12. buf[1] = 'b';  
    13. buf[2] = '中';  
    14. bos.write(buf);  
    15.  
    16. // 關閉輸出流  
    17. bos.close();  
    18. os.close();  
    19. fos.close();  
    20. catch (IOException e) {  
    21. }  
    22. }  

    posted on 2013-08-08 22:08 奮斗成就男人 閱讀(5231) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产精品无码一线岛国| 国产啪亚洲国产精品无码| 亚洲精品福利网泷泽萝拉| 黄网站免费在线观看| 亚洲人成网亚洲欧洲无码久久| 国产精品福利片免费看| 久久亚洲中文字幕精品一区四| h视频在线免费观看| 亚洲人色婷婷成人网站在线观看| 国产成人无码免费看片软件 | 国产亚洲精品岁国产微拍精品| 免费福利在线观看| 亚洲色欲久久久久综合网| 一级人做人爰a全过程免费视频| 中文字幕专区在线亚洲| a级日本高清免费看| 亚洲色图综合网站| 国内精品乱码卡1卡2卡3免费| 亚洲性无码AV中文字幕| 亚洲国产中文v高清在线观看| 亚洲精品偷拍视频免费观看| 久久亚洲成a人片| 可以免费看黄视频的网站| 亚洲AV无码国产一区二区三区| 免费吃奶摸下激烈视频| a级成人毛片免费图片| 久久久久亚洲AV无码观看| 女人被弄到高潮的免费视频| 黄色一级视频免费观看| 亚洲va在线va天堂va888www| 免费专区丝袜脚调教视频| 美女免费视频一区二区三区| 亚洲区小说区图片区QVOD| 99久久国产热无码精品免费| 亚洲a∨国产av综合av下载| 亚洲乱码中文字幕综合| 免费A级毛片无码无遮挡内射| 日韩在线视频免费| 亚洲精品在线免费观看| 免费人妻av无码专区| 一级特黄aa毛片免费观看|