java InputStreamReader /OutputStreamWriter 轉(zhuǎn)換流

轉(zhuǎn)換流:都是字節(jié)流轉(zhuǎn)向字符流
InputStreamReader
OutputStreamWriter

轉(zhuǎn)換流的作用:
  1. 可以把字節(jié)流轉(zhuǎn)換成字符流。
  1. 可以指定任意的碼表進(jìn)行讀寫數(shù)據(jù)。

FileReader---------- 默認(rèn)gbk
FileWriter ---------默認(rèn)gbk

***疑問(wèn):
為什么讀取數(shù)據(jù)或?qū)懭霐?shù)據(jù)的時(shí)候不直接使用BufferedReader/BufferedWriter呢? ***
除了上面可以指定碼表的功能外,還有一個(gè)原因就是好有的函數(shù)返回的就是字節(jié)流,或者一些第三方框架就是使用的字節(jié)流,這個(gè)是我們沒(méi)有辦法改變的; 當(dāng)時(shí)我們?cè)谧x寫數(shù)據(jù)的時(shí)候又希望使用字符流,所以誕生了這個(gè)轉(zhuǎn)換流

public class Demo3 {

    public static void main(String[] args) throws IOException {
//      readTest1();
//      writeTest1();
//      writeData();
        readData();
    }
    
    //指定碼表讀取數(shù)據(jù)
    public static void readData() throws IOException{
        FileInputStream fileInputStream = new FileInputStream("F:\\a.txt");
        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"utf-8");
        char[] buf = new char[1024];
        int length = 0 ; 
        while((length = inputStreamReader.read(buf))!=-1){
            System.out.println(new String(buf,0,length));
        }
        
        //關(guān)閉資源
        inputStreamReader.close();
    }
    
    
    //指定碼表進(jìn)行寫數(shù)據(jù)
    public static void writeData() throws IOException{
        FileOutputStream fileOutputStream = new FileOutputStream("f:\\a.txt");  // FileWriter 默認(rèn)使用的碼表是gbk碼表,而且不能指定碼表寫。
        OutputStreamWriter fileWriter = new OutputStreamWriter(fileOutputStream, "utf-8");
        fileWriter.write("中國(guó)");
        fileWriter.close();
    }
    

    //把輸出字節(jié)流轉(zhuǎn)換成輸出字符流
    public static void  writeTest1() throws IOException{
        FileOutputStream fileOutputStream = new FileOutputStream("f:\\a.txt");
        String data = "hello world";
        //需求:要把輸出字節(jié)流轉(zhuǎn)換成輸出字符流.          //字節(jié)流向文件輸出數(shù)據(jù)的時(shí)候需要借助String類的getbyte功能,我想使用字符流.
        OutputStreamWriter writer  = new OutputStreamWriter(fileOutputStream);
        //寫出數(shù)據(jù)
        writer.write(data);
        //關(guān)閉資源
        writer.close();
    }
    
    
    
    //把輸入字節(jié)流轉(zhuǎn)換成了輸入字符流  -----> InputStreamReader
    public static void readTest1() throws IOException{
        //先獲取標(biāo)準(zhǔn) 的輸入流
        InputStream in = System.in;
        //把字節(jié)流轉(zhuǎn)換成字符流
        InputStreamReader inputStreamReader = new InputStreamReader(in);
        
        //一次讀取一行的功能
//      BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String line = null;
        while((line = bufferedReader.readLine())!=null){
            System.out.println(line);
        }

    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 一、IO流整體結(jié)構(gòu)圖 流是一組有順序的,有起點(diǎn)和終點(diǎn)的字節(jié)集合,是對(duì)數(shù)據(jù)傳輸?shù)目偡Q或抽象。即數(shù)據(jù)在兩設(shè)備間的傳輸稱...
    慕凌峰閱讀 1,181評(píng)論 0 12
  • 概述: 1、IO流:即Input Output的縮寫。 2、特點(diǎn):1)IO流用來(lái)處理設(shè)備間的數(shù)據(jù)傳輸。2)Java...
    玉圣閱讀 1,265評(píng)論 0 3
  • 1 IO(二)No19 【 緩沖流:內(nèi)置了緩沖區(qū),對(duì)現(xiàn)有的流對(duì)象進(jìn)行了封裝,實(shí)現(xiàn)了高效的讀寫操作并增強(qiáng)了功能 ...
    征程_Journey閱讀 723評(píng)論 0 1
  • 一、流的概念和作用。 流是一種有順序的,有起點(diǎn)和終點(diǎn)的字節(jié)集合,是對(duì)數(shù)據(jù)傳輸?shù)目偝苫虺橄蟆<磾?shù)據(jù)在兩設(shè)備之間的傳輸...
    布魯斯不吐絲閱讀 10,080評(píng)論 2 95
  • 在經(jīng)過(guò)一次沒(méi)有準(zhǔn)備的面試后,發(fā)現(xiàn)自己雖然寫了兩年的android代碼,基礎(chǔ)知識(shí)卻忘的差不多了。這是程序員的大忌,沒(méi)...
    猿來(lái)如癡閱讀 2,866評(píng)論 3 10