萌新學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衝突的方案
將序列化號寫死 只要類中存在序列化號 系統將不會重新生成