查看完整版本: JAVA IO串流問題
頁: [1]

1006910211 發表於 2016-10-27 07:57 PM

JAVA IO串流問題


我想請問各位程式高手一些JAVA IO的問題,麻煩各位協助釐清我的觀念
PrintWriter pw = new PrintWriter(System.out, true);
PrintWriter應該是一個文字類的輸出串流, 但建構子卻允許放上System.out,System. out為PrintStream的物件變數 應該是屬於位元串流,不太曉得這個邏輯, 字元串流去接上一個位元串流
另外建構子的autoFlush如果宣告false跟true差 異在那兒,緩衝區資料有無清除是否有關係
一般我們在編輯程式都屬於文字類, 為何將程式碼輸出至螢幕要使用System. out.print的物件PrintStream位元輸出 而不是PrintWriter的字元輸出



煩請協助求解,非常ˊ感謝
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

22616846 發表於 2016-10-27 09:46 PM

在java中,一個char是16bit,一個 byte是8bit,PrintStream遇到會把字元轉成位元輸出,但是String是用UNICODE編碼的,所以在某些狀況下用PrintStream可能會遇到亂碼。java api有建議在輸出文字時,最好用PrintWriter來替代PrintStream。我們寫程式一般會用System. out.print作輸出原因是很方便,你不用處理flush,你可以丟任意型態的物件,也不用處理exception,而且System.out.print對於程式設計師而言,一般都是用來debug。...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

mnbhjk2 發表於 2016-11-1 03:32 PM

PrintStream是屬於Outputstream的子類別,只要是Outputstream的子類別皆可使用,
OutputStream與Writer最大的不同在於一個是用Byte去紀錄,一個是用Java設定的編碼方式去紀錄(預設為UTF-8)所以當您對Outputstream寫入字串時,實際上都會幫你轉成ByteArray code直接紀錄在RAM或檔案,下次用Writer輸出還原時就會頭痛為何會變亂碼了,所以你可以在寫入Outputstream時用ByteArrayOutputstream搭配new String("內容","UTF-8)去整合好你的encode即可...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
頁: [1]