IO流

package nodstream;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class TestFileCopy {

    /**
     * 測試文件拷貝
     * 
     *  \轉義字符 :使得緊跟在它之后的字符就按本意處理,不做任何特殊用途
     */
    public static void main(String[] args) throws Exception{
        //讀取源文件的輸入流
        FileInputStream fis = new FileInputStream("f:\\corejava\\1.png");
        
        //寫備份文件的輸出流
        FileOutputStream fos = new FileOutputStream("copy1.png");
        
        //邊讀邊寫
        byte[] b = new byte[100];
        
        while(true){
            int n = fis.read(b);
            if(n==-1) break;
            fos.write(b,0,n); // 防著最后一次讀到的數據(不一定完全裝滿數組b)
        }

        fis.close();
        fos.close();
    }

}

IO流
一.流

  1. 概念:是對象,用來在內存和外部的存儲設備之間交換數據的通道。

  2. 分類
    1)方向: 輸入流 輸出流 【判定標準,以當前程序為參照物】
    2)單位:
    字節流 -- 以字節為單位傳遞數據 , 可以傳遞任意類型的數據
    字符流 -- 以字符為單位傳遞數據 , 只可以讀寫文本文件
    3)功能:
    節點流 -- 實際負責數據傳遞的流對象
    過濾流 -- 負責為其他流對象添加輔助功能的流對象

二.字節流

  1. 字節流父類:OutputStream(字節輸出流) | InputStream(字節輸入流)

  2. 字節節點流 【重點】
    1)FileOutputStream : 文件字節輸出流

    2)FileInputStream :文件字節輸入流

2016-11-07_230746.png
  1. 字節過濾流

1)DataInputStream | DataOutputStream
I. 提供了直接讀寫8種基本數據類型的功能
II. 提供了直接讀寫String的方法(writeUTF readUTF )

  1. BufferedInputStream | BufferedOutputStream
    I. 提供了緩存功能的字節過濾流,以空間換時間,減少訪問硬盤的次數,提高數據
    傳輸速度。緩存功能對于輸入流效果不明顯
    II. 緩沖器輸出:
    A. 關閉流時,會自動flush
    B. 數據將緩沖區填滿,會自動flush
    C. 手動輸出: 需要調用流對象的flush()

3)ObjectInputStream | ObjectOutputStream
I. 提供了直接讀寫對象 以及 8種基本數據類型數據 的功能
提供了緩沖功能 --- 可以用它替換上面兩種過濾流
II. 對象只有能夠序列化,才能放在流里傳遞
實現類Serializable接口的對象,就是可序列化的對象
注意:Serializable接口是一個“標記接口”
III. 不需要參與序列化的屬性,可以用關鍵字transient修飾
IV. 對象以及對象的所有屬性都必須是可序列化的,才能通過流傳遞
V. 讀取對象的輸入流以拋出EOFException的形式提示用戶文件讀取完畢

4)PrintStream --- System.out

三.字符編碼

  1. ASCII編碼 --- 美國
  2. GB2312 --- 中國,國標
  3. GBK ---- 國標的擴展
  4. BIG5 ---- 中文繁體,臺灣
  5. ISO8859_1 --- 西歐,希臘,阿拉伯,泰語,希伯來
  6. UTF-8 ---- 國際統一編碼,是可變長的unicode

注意:如果編解碼方式不統一,則可能導致亂碼

四.字符流

  1. 父類 : Reader | Writer

  2. 節點流:
    FileWriter

    1. write(int c) --- 向流里寫一個字符
      2)write( char[] c) --- 向流里寫一個字符數組
      3)write(String str) --- 向流里寫一個String
      FileReader
      1)read() --- 讀取一個字符,返回字符的int形式,-1結束
      2)read(char[] c) ---一次讀取多個字符,存入數組返回,返回值為讀到的個數,
      -1結束
  3. 過濾流
    BufferdReader | PrintWriter --- 帶緩沖功能的字符流
    1)PrintWriter提供了大量的println方法,輸出方便
    2)BufferedReader 提供了readLine(),一次讀取一行文字,直到讀到行結束符為止。
    這是一個阻塞方法。

    InputStreamReader | OutputStreamWriter ---- “橋轉換器”
    1)負責將一個字節流轉換成字符流
    2)可以在構建過程中,指定編碼方式(唯一一個可以指定編碼的流)
    通常和FileInputStream配合,用來讀取指定了編碼的文本文件

五.流總結
流程序的編程步驟:
1. 創建節點流對象 (優選FileInputStream,FileOutputStream)
2. 封裝過濾流 (優選“橋轉換器”,帶緩沖的字符過濾流)
3. 讀寫數據 ( println 和 readLine )
4. 關閉流對象

2016-11-07_230720.png

六.File類 (輔助類)

  1. 概念:一個File類的對象代表了文件系統里的一個文件或者目錄,使用File類不能改變文件內容,只能設置一些屬性。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 概述: 1、IO流:即Input Output的縮寫。 2、特點:1)IO流用來處理設備間的數據傳輸。2)Java...
    玉圣閱讀 1,270評論 0 3
  • 概述 流是一組有順序的,有起點和終點的字節集合,是對數據傳輸的總稱或抽象。即數據在兩設備間的傳輸稱為流,流的本質是...
    wustor閱讀 1,827評論 5 6
  • # Java 流式輸入 輸出原理 # Java 流的分類 # 輸入 輸出 流 類 # 常見的節點流 和 處理流 #...
    時待吾閱讀 333評論 0 0
  • 圖片來源于互聯網 一、IO流概述 IO流用于處理設備之間的數據傳輸問題。Java對數據的操作,通過流的形式。操作存...
    比軒閱讀 731評論 0 3
  • # 3.1 File # ## 3.1.1 File基本概念 ## 1.基本概念 -File類用于表示文件(目錄)...
    閆子揚閱讀 490評論 0 0