PrintStream和PrintWriter的API幾乎相同,都能輸出各種形式的數據,構造方法也幾乎相同
PrintWriter多了個接受Writer參數
API比較:
那麼,它們的區別究竟在哪裡?來自stackflow
主要意思就是,2個類的功能基本相同,PrintStream能做的PrintWriter也都能實現,並且PrintWriter的功能更為強大。但是由於PrintWriter出現的比較晚,較早的System.out使用的是PrintStream來實現的,所以為了兼容就沒有廢棄PrintStream。
2個類最大的差別是,PrintStream在輸出字符,將字符轉換為字節時採用的是系統默認的編碼格式,這樣當數據傳輸另一個平台,而另一個平台使用另外一個編碼格式解碼時就會出現問題,存在不可控因素。而PrintWriter可以在傳入Writer時可由程序員指定字符轉換為字節時的編碼格式,這樣兼容性和可控性會更好。
下面這個程式顯示了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();}}}總結
以上就是本文關於PrintStream和PrintWriter的區別簡介的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!