1、前言:InputStreamReader 、OutputStreamWriter:
附:讀入時產生亂碼的緣由:java
一、
當前工程字符集與 源頭文件內容的 字符集不符合!二、
在讀取時,假如用read()一個一個字符(char)的讀取,char佔2個字節(Java採用Unicode)三、
注:1.編碼與中文: 四、
在UTF-8下,讀取中文字符,意味着讀一箇中文,只能讀它的2/3 !2、應用場景:
System.in
是字節流對象,表明鍵盤的輸入。BufferedReader
特有的方法readline()
, 可是發現 BufferedReader
的構造函數的參數是一個 Reader
對象,此時轉換流就派上用場了!import java.io.*; public class IO_putStream_RW { public static void main(String[] args) { /*(1)、建立源:源頭就是用戶輸入的字符吧!*/ /*(2)、選擇流:*/ try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); BufferedReader br = new BufferedReader(new InputStreamReader(System.in, "UTF-8"))) { // 使用字符輸入和輸出流 String str = br.readLine(); while ("exit".equals(str)){ //字符串內置的equals()比較的是字符串的"內容" //寫到控制檯 bw.write(str); //換行 bw.newLine(); //刷新 bw.flush(); //有關flush()的做用:`http://sfau.lt/b5bu777 //繼續讀 str = br.readLine(); } } catch (IOException e){ e.printStackTrace(); } } }
3、總結:IO流的操做都離不開"四大步驟"
一、
建立源二、
選擇流三、
系列操做四、
關閉流函數
try (try...with--resource)
已經幫咱們省了不少功夫 若是想規範一下本身的代碼,推薦手寫!)