Jakartase_IO流_ —轉換流(三)

1、前言:InputStreamReader 、OutputStreamWriter:

  • 用來實現將字節流轉化成字符流
  • 字符集的參數設定:能夠處理 不一樣的字符集(UTF-八、GBK(保存方式-->ANSI編碼) ...), by th way, 不設定字符集, 默認以當前工程的字符集相同!
  • 附:讀入時產生亂碼的緣由:java

    • 一、當前工程字符集與 源頭文件內容的 字符集不符合!
    • 二、在讀取時,假如用read()一個一個字符(char)的讀取,char佔2個字節(Java採用Unicode)
    • 三、注:1.編碼與中文
      Unicode/GBK下: 2字節 ,
      UTF-8: 3字節
    • 四、在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流的操做都離不開"四大步驟"

  • 一、建立源
  • 二、選擇流
  • 三、系列操做
  • 四、關閉流函數

    • 附:先打開的後關閉!Java7的帶資源的try (try...with--resource) 已經幫咱們省了不少功夫 若是想規範一下本身的代碼,推薦手寫!)
相關文章
相關標籤/搜索