No.21 打印輸出流

簡(jiǎn)介:

java.io 提供了兩個(gè)打印流,PrintStream/PrintWriter他們都屬于輸出流。
PrintStream繼承與OutputStream,PirntWriter直接繼承與字符流基類(lèi)Writer。但是兩者都可以接受字節(jié)流/字符流作為構(gòu)造函數(shù)的參數(shù)。

作用:

他們都非常方便的使用于輸出流中,直接使用println();來(lái)輸出任意類(lèi)型的數(shù)據(jù)。

不同:

轉(zhuǎn):
(1)PrintStream是OutputStream的子類(lèi),PrintWriter是Writer的子類(lèi),兩者處于對(duì)等的位置上,所以它們的API是非常相似的。
(2)PrintWriter實(shí)現(xiàn)了PritnStream的所有print方法。
(3)對(duì)于PrintStream,所有println方法都在內(nèi)部調(diào)用相應(yīng)的print方法,比如println(char x)的方法體就是調(diào)用print(x);再寫(xiě)入一個(gè)平臺(tái)相關(guān)的換行符。
(4)PrintStream構(gòu)建時(shí)會(huì)在內(nèi)部new一個(gè)BufferedWriter,所有print方法都在內(nèi)部調(diào)用這個(gè)Writer的write方法(write(String)或write(char[]))——對(duì)于print(char[]),直接調(diào)用write(char[]);對(duì)于其他的print方法,先用String.valueOf獲得參數(shù)的字符串表示,然后調(diào)用write(String)。
(5) PrintWriter,所有println方法也都在內(nèi)部調(diào)用print方法,print方法調(diào)用write方法。傳入OutputStream時(shí),PrintWriter會(huì)在內(nèi)部構(gòu)造一個(gè)BufferedWriter;而傳入Writer時(shí),PrintStream內(nèi)部直接使用該Writer,此時(shí)PrintWriter是否進(jìn)行了緩沖全看該Writer。
所以,對(duì)于使用print系列方法的場(chǎng)合,二者沒(méi)什么區(qū)別。
(6)但是,PrintStream是字節(jié)流,它有處理byte的方法,write(int)和write(byte[],int,int);PrintWriter是字符流,它沒(méi)有處理raw byte的方法。
(7)PrintStream和PrintWriter的auto flushing機(jī)制有點(diǎn)不同,前者在輸出byte數(shù)組、調(diào)用println方法、輸出換行符或者byte值10(即\n)時(shí)自動(dòng)調(diào)用flush方法,后者僅在調(diào)用println方法時(shí)發(fā)生auto flushing。

示例:

(1)PrintStream實(shí)例:

public static void main(String[] args) {

    try {  
        //構(gòu)建一個(gè)字節(jié)輸出流  
       OutputStream os=new FileOutputStream("d:\\test.txt");  
       //構(gòu)建緩沖流  
       BufferedOutputStream bos=new BufferedOutputStream(os);  
       //構(gòu)建字節(jié)打印流  
       PrintStream ps=new PrintStream(bos);  
       //數(shù)據(jù)輸出  
       //println會(huì)換行輸出,print不會(huì)換行  
       ps.println(false);//寫(xiě)入boolean型  
       ps.println("好好學(xué)習(xí),天天向上");//寫(xiě)入字符串  
       ps.println(3.1415926);//寫(xiě)入double類(lèi)型  
         
       ps.println(new Person("小明", 20));//寫(xiě)入person類(lèi)型  
       //關(guān)閉流  
       ps.close();  
       bos.close();  
       os.close();  
   } catch (FileNotFoundException e) {  
       e.printStackTrace();  
   } catch (IOException e) {  
       e.printStackTrace();  
   }  
}

輸出結(jié)果:

false
好好學(xué)習(xí),天天向上
3.1415926
person [name=小明, age=20]

(2)PrintWriter示例:

 public static void main(String[] args) {  
    
     try {  
         //構(gòu)建一個(gè)字符輸出流  
        Writer os=new FileWriter("L:\\test.txt");  
        //構(gòu)建緩沖流  
        BufferedWriter bos=new BufferedWriter(os);  
        //構(gòu)建字符打印流  
        PrintWriter ps=new PrintWriter(bos);  
        //println會(huì)換行輸出,print不會(huì)換行  
        ps.println(false);//寫(xiě)入boolean型  
        ps.println("好好學(xué)習(xí),天天向上");//寫(xiě)入字符串  
        ps.println(3);//寫(xiě)入int類(lèi)型  
          
        ps.println(new person("小明明", 20));//寫(xiě)入person類(lèi)型  
        //關(guān)閉流  
        ps.close();  
        bos.close();  
        os.close();  
          
    } catch (FileNotFoundException e) {  
        e.printStackTrace();  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
 
}    

輸出結(jié)果:

false
好好學(xué)習(xí),天天向上
3.1415926
person [name=小明, age=20]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容