1. 程式人生 > >萌新學Java之初入門徑九----緩衝流

萌新學Java之初入門徑九----緩衝流

轉換流

OutputStreamWriter(字元流轉向位元組流的橋樑)

  • 1.將程式中的字元 按照 建立轉換流時給出的編碼格式 去查對應的碼錶(GBK就去查GBK格式的碼錶)
  • 2.將查到的兩個或三個位元組 交給建立轉換流時 傳入的位元組流
  • 3.最終時 使用位元組流 將檔案寫入

InputStreamReader(位元組流轉向字元流的橋樑)

  • 1.先按位元組讀 讀完用轉換流去查詢對應的編碼表
  • 2.最終以字元的形式讀取到程式中

    編碼格式

  • mac 預設 UTF-8 一箇中文3個位元組
  • win 預設 GBK 一箇中文2個位元組

1.讀GBK

FileInputStream fis = new FileInputStream(“/Users/lanou/Desktop/Test/wl123.txt”);

    InputStreamReader isr = new InputStreamReader(fis,"GBK");

    char[] b = new char[1024];
    int len = 0;
    while ((len = isr.read(b)) != -1) {
        System.out.println(new String(b,0,len));
    }

    isr.close();

2.//轉換流寫個GBK格式的檔案

//檔案位元組流 FileOutputStream fos = new FileOutputStream(“/Users/lanou/Desktop/Test/wl123.txt”); //編碼格式 大小寫都行 OutputStreamWriter osw = new OutputStreamWriter(fos, “GBK”); //寫入 osw.write(“世間安得雙全法,不負如來不負卿!”); osw.close();

緩衝流(高效流)

  • 緩衝位元組流
  • BufferedOutputStream
  • 預設緩衝區大小: 8k
  • 內部自帶一個緩衝陣列

1.//建立一個緩衝流

  FileOutputStream fos = new FileOutputStream("/Users/lanou/Desktop/Test/緩衝流.txt");
    BufferedOutputStream bos = new BufferedOutputStream(fos);


    //寫入
    bos.write("123".getBytes());

    bos.close();

2.//緩衝流讀取

FileInputStream fis = new FileInputStream(“/Users/lanou/Desktop/Test/緩衝流.txt”); BufferedInputStream bis = new BufferedInputStream(fis); byte[] b = new byte[1024]; int len = 0; while ((len = bis.read(b)) != -1) { System.out.println(new String(b, 0, len)); } bis.close();

流 總結:

  • 位元組流
  • 字元流
  • 轉換流
  • 高效流

明確操作的檔案是原始檔還是目標檔案?

  • 原始檔 讀檔案 輸入流 InputStream Reader
  • 目標檔案 寫檔案 輸出流 OutputStream Writer

Properties集合(雙列集合 是Hashtable的子類)

  • 該集合 是唯一一個能和IO流有關係的集合
  • 注意:一般該集合之儲存 字串型別的鍵值對
  • load:將檔案直接讀入到集合中
  • store:將集合中的鍵值對直接寫入到檔案中

讀取檔案的格式

  • key=value
  • 注意:
  • 1.等號前後不能加空格
  • 2.一般該檔案使用.properties字尾(起標識作用)
  • 3.#號為註釋

序列化流(反序列化流 物件流)

  • 將物件直接寫入到檔案中
  • ObjectOutputStream
  • ObjectInputStream

阻止成員變數序列化

  • 1.static 修飾成員變數
  • 2.使用關鍵字 transient(瞬態) 標識成員變數

解決序列化ID衝突的方案

將序列化號寫死 只要類中存在序列化號 系統將不會重新生成