PrintStream和PrintWriter的區(qū)別簡介
PrintStream和PrintWriter的API幾乎相同,都能輸出各種形式的數(shù)據(jù),構(gòu)造方法也幾乎相同
PrintWriter多了個接受Writer參數(shù)
API比較:
那么,它們的區(qū)別究竟在哪里?來自stackflow
主要意思就是,2個類的功能基本相同,PrintStream能做的PrintWriter也都能實現(xiàn),并且PrintWriter的功能更為強大。但是由于PrintWriter出現(xiàn)的比較晚,較早的System.out使用的是PrintStream來實現(xiàn)的,所以為了兼容就沒有廢棄PrintStream。
2個類最大的差別是,PrintStream在輸出字符,將字符轉(zhuǎn)換為字節(jié)時采用的是系統(tǒng)默認(rèn)的編碼格式,這樣當(dāng)數(shù)據(jù)傳輸另一個平臺,而另一個平臺使用另外一個編碼格式解碼時就會出現(xiàn)問題,存在不可控因素。而PrintWriter可以在傳入Writer時可由程序員指定字符轉(zhuǎn)換為字節(jié)時的編碼格式,這樣兼容性和可控性會更好。
下面這個程式顯示了PrintStream與PrintWriter兩個物件在處理相同輸出目的時的作法,程式將會在熒幕上顯示 "簡體中文" 四個字元:
StreamWriterDemo.java package onlyfun.caterpillar; import java.io.*; public class StreamWriterDemo { public static void main(String[] args) { try { byte[] sim = {(byte)0xbc, (byte)0xf2, // 簡 (byte)0xcc, (byte)0xe5, // 體 (byte)0xd6, (byte)0xd0, // 中 (byte)0xce, (byte)0xc4 } ; // 文 InputStreamReader inputStreamReader = new InputStreamReader(new ByteArrayInputStream(sim), "GB2312"); PrintWriter printWriter =new PrintWriter(new OutputStreamWriter(System.out, "GB2312")); PrintStream printStream =new PrintStream(System.out, true, "GB2312"); int in; while((in = inputStreamReader.read()) != -1) { printWriter.println((char)in); printStream.println((char)in); } inputStreamReader.close(); printWriter.close(); printStream.close(); } catch(ArrayIndexOutOfBoundsException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } }
總結(jié)
以上就是本文關(guān)于PrintStream和PrintWriter的區(qū)別簡介的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
springboot中@RestController注解實現(xiàn)
在JavaWeb開發(fā)中,Spring框架及其組件SpringMVC因高效和強大功能而廣受歡迎,@RestController注解是SpringMVC中的重要組成部分,下面就來介紹一下,感興趣的可以了解一下2024-09-09Java中l(wèi)ock和tryLock及l(fā)ockInterruptibly的區(qū)別
這篇文章主要介紹了Java中l(wèi)ock和tryLock及l(fā)ockInterruptibly的區(qū)別,文章介紹詳細(xì),具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05spring-boot整合dubbo:Spring-boot-dubbo-starter
這篇文章主要介紹了spring-boot整合dubbo:Spring-boot-dubbo-starter的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-05-05MyBatis-Plus攔截器實現(xiàn)數(shù)據(jù)權(quán)限控制的示例
本文主要介紹了MyBatis-Plus攔截器實現(xiàn)數(shù)據(jù)權(quán)限控制的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02SpringBoot項目創(chuàng)建使用+配置文件+日志文件詳解
Spring的出現(xiàn)是為了簡化 Java 程序開發(fā),而 SpringBoot 的出現(xiàn)是為了簡化 Spring 程序開發(fā),這篇文章主要介紹了SpringBoot項目創(chuàng)建使用+配置文件+日志文件,需要的朋友可以參考下2023-02-02Spring中byName和byType的區(qū)別及說明
這篇文章主要介紹了Spring中byName和byType的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12淺談選擇結(jié)構(gòu)if語句和switch語句的區(qū)別
下面小編就為大家?guī)硪黄獪\談選擇結(jié)構(gòu)if語句和switch語句的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-07