<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 奮斗成就男人 閱讀(5235) 評論(0)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 猫咪免费人成网站在线观看| 99久久99这里只有免费的精品| 69xx免费观看视频| 78成人精品电影在线播放日韩精品电影一区亚洲 | 亚洲无砖砖区免费| 最近免费2019中文字幕大全| 亚洲一级二级三级不卡| 少妇无码一区二区三区免费| 亚洲一区二区三区高清| 黄色永久免费网站| 亚洲熟妇无码av另类vr影视| 国产免费人成视频在线观看 | 中文国产成人精品久久亚洲精品AⅤ无码精品 | 青青视频观看免费99| xxx毛茸茸的亚洲| 日韩午夜免费视频| 免费视频成人国产精品网站| 亚洲一区二区三区香蕉| 久草福利资源网站免费| 亚洲国产成人久久| 日本成人在线免费观看| 一级做受视频免费是看美女| 亚洲人成色7777在线观看| 59pao成国产成视频永久免费| 亚洲综合伊人制服丝袜美腿| 免费观看午夜在线欧差毛片| 久久久久久国产a免费观看不卡| 亚洲av不卡一区二区三区| 日韩欧美一区二区三区免费观看| 在线91精品亚洲网站精品成人| 亚洲日韩欧洲乱码AV夜夜摸| 久久福利资源网站免费看| 国产成人亚洲精品播放器下载| 中文字幕精品亚洲无线码一区| 久久国产免费观看精品3| 亚洲精品无码不卡在线播放| 亚洲午夜国产精品无码老牛影视 | 亚洲Av无码专区国产乱码DVD| 91精品免费国产高清在线| 国产亚洲精品成人久久网站| 亚洲AV午夜成人影院老师机影院|