流的分類:
IO流指的是輸入輸出流,用來處理設備上的數據,這裏的設備指硬盤、內存、鍵盤錄入、網絡傳輸等。
1) 根據數據的流向來分:
輸出流:是用來寫數據的,是由程序(內存)--->外界設備。
輸入流:是用來讀數據的,是由外界設備--->程序(內存)。
2) 根據流數據的格式來分:
字節流:處理聲音或者圖片等二進制的數據的流,比如 InputStream;
字符流:處理文本數據(如txt文件)的流,比如 InputStreamReader ;
3) 根據流數據的包裝過程來分:
節點流:又稱爲低級流,特點是:數據源明確,真實負責讀寫數據的流。
處理流:又稱爲高級流,特點是:不能單獨存在(沒意義),用來處理其他流,所有高級流都封裝了某些特定功能的讀寫操作,目的是簡化我們的讀寫操作具體的流。
1) 字節流:
InputStream 與 OutputStream;
InputStream 是所有字節輸入流的父類,其定義了基礎的讀取方法;
OutputStream 是所有字節輸出流的父類,其定義了基礎的寫出方法;
包含:
1、文件流:FileOutputStream 是文件的字節輸出流,我們使用該流可以以字節爲單位將數據寫入文件(默認覆蓋模式,第二個參數設施爲 true 可改變爲追加模式)。FileInputStream 是文件的字節輸入流,我們使用該流可以以字節爲單位讀取文件內容。
2、緩衝流:BufferedOutputStream 緩衝字節輸出流,需使用flush方法將緩存的字節寫出或者在關閉流時一次性寫出。BufferedInputStream 是緩衝字節輸入流。
3、對象流:ObjectOutputStream 是用來對對象進行序列化的輸出流。ObjectInputStream 是用來對對象進行反序列化的輸入流。
2) 字符流:
Reader 和 Writer;
Reader 是所有字符輸入流的父類。
Writer 是所有字符輸出流的父類。
字符流是以字符 (char) 爲單位讀寫數據的。一次處理一個 unicode。字符流都是高級流,其底層都是依靠字節流進行讀寫數據的。
包含:
轉換流:
InputStreamReader:字符輸入流,使用該流可以設置字符集
OutputStreamWriter:字符輸出流,使用該流可以設置字符集
字符緩衝流:
PrintWriter 具有自動行刷新的緩衝該字符輸出流,需第二個參數設置爲 true。
BufferedReader 是緩衝字符輸入流;
注:PrintWriter 寫出字符串時我們通常不使用 Writer 提供的 write( ) 相關方法,而是使用重載的 print 和println 方法。
BufferedReader 讀取字符串時可以使用 readLine( ) 連續讀取一行字符串,直到讀取到換行符爲止,返回的字符串中不包含該換行符,未讀到返回 null。