<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)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 一区二区在线视频免费观看| 亚洲乱码一区二区三区国产精品| 成a人片亚洲日本久久| 91嫩草国产在线观看免费| 亚洲综合激情另类小说区| 91禁漫免费进入| 亚洲精品自拍视频| 国产免费的野战视频| 亚洲妓女综合网99| 午夜两性色视频免费网站| 亚洲AV无码一区二区一二区| 国产乱人免费视频| 一级毛片在线免费视频| 亚洲一区二区三区偷拍女厕| 国产成人无码区免费内射一片色欲| 久久久久久a亚洲欧洲AV| 4455永久在线观免费看| 亚洲中文字幕一二三四区苍井空| 成人永久福利免费观看| 久久一区二区三区免费| 精品亚洲成a人片在线观看| 91频在线观看免费大全| 欧美亚洲国产SUV| 久久精品国产亚洲AV不卡| 三年片在线观看免费观看大全动漫| 亚洲精品熟女国产| 日韩一区二区三区免费体验| 一级毛片大全免费播放下载| 亚洲黄色免费网站| 精品久久免费视频| 久久国产精品成人免费| 亚洲精品无码av中文字幕| 亚洲性在线看高清h片| 最近最新高清免费中文字幕 | 亚洲AV无一区二区三区久久| 国产在线观看麻豆91精品免费 | 色欲aⅴ亚洲情无码AV| 怡红院亚洲怡红院首页| 99re热免费精品视频观看| 一区视频免费观看| 亚洲成a人片在线看|