字節流和字符流:數組
字節流:以字節爲單位,每次次讀入或讀出是8位數據。能夠讀任何類型數據。多線程
字符流:以字符爲單位,每次次讀入或讀出是16位數據。其只能讀取字符類型數據。dom
輸出流和輸入流:函數
輸出流:從內存讀出到文件。只能進行寫操做。工具
輸入流:從文件讀入到內存。只能進行讀操做。編碼
節點流和處理流:spa
節點流:直接與數據源相連,讀入或讀出。線程
處理流:與節點流一塊使用,在節點流的基礎上,再套接一層,套接在節點流上的就是處理流。指針
爲何要有處理流?直接使用節點流,讀寫不方便,爲了更快的讀寫文件,纔有了處理流。code
三種基本的節點流:FileInputStream、ByteArrayInputStream、PipedInputStream
四個處理流:ObjectInputStream 和全部FilterInputStream 的子類DataInputStream、BufferedInputStream、SequenceInputStream
同上
字節流的輸入和輸出對照圖:
CharArrayReader、StringReader 是兩種基本的介質流,它們分別將 Char 數組、String中讀取數據。
BufferedReader 很明顯就是一個裝飾器,它和其子類負責裝飾其它 Reader 對象。
PipedReader:是從與其它線程共用的管道中讀取數據
FilterReader 是全部自定義具體裝飾流的父類,其子類PushbackReader 對 Reader 對象進行裝飾,會增長一個行號。
InputStreamReader: 是一個鏈接字節流和字符流的橋樑,它將字節流轉變爲字符流。FileReader能夠說是一個達到此功能、經常使用的工具類,在其源代碼中明顯使用了將FileInputStream 轉變爲 Reader 的方法。咱們能夠從這個類中獲得必定的技巧。Reader 中各個類的用途和使用方法基本和 InputStream 中的類使用一致。
CharArrayWriter、StringWriter 是兩種基本的介質流,它們分別向 Char 數組、String 中寫入數據。
PipedWriter: 是向與其它線程共用的管道中寫入數據
BufferedWriter 是一個裝飾器,爲 Writer 提供緩衝功能。
PrintWriter 和 PrintStream 極其相似,功能和使用也很是類似。
OutputStreamWriter: 是OutputStream 到 Writer 轉換的橋樑,它的子類FileWriter,其實就是一個實現此功能的具體類,功能和使用和OutputStream極其相似
字符流的輸入和輸出對照圖
..]
轉換流的特色:
字符流和字節流之間的橋樑
可對讀取到的字節數據通過指定編碼轉換成字符
可對讀取到的字符數據通過指定編碼轉換成字節
什麼時候使用轉換流?
當字節和字符之間有轉換動做時
流操做的數據須要編碼或解碼時
OutputStreamWriter:輸出流轉到寫流
String fileName= "hello.txt"; try { Writer out=new OutputStreamWriter( new FileOutputStream( new File(fileName))); try { out.write("hello"); }catch (IOException e){ e.printStackTrace(); }finally { out.close(); } }catch (IOException e){ e.printStackTrace(); }
InputStreamReader:輸入流轉到讀流
try { Reader read=new InputStreamReader( new FileInputStream(new File(fileName))); try { BufferedReader reader = new BufferedReader(read); String s; while ((s = reader.readLine()) != null){ System.out.println(s); } }catch (IOException e){ e.printStackTrace(); }finally { read.close(); } }catch (IOException e){ e.printStackTrace(); }
這兩個流對象是字符體系中的成員,它們有轉換做用,自己又是字符流,因此在構造的時候須要傳入字節流對象進來。
對文件進行操做(節點流):
FileInputStream(字節輸入流)
FileOutputStream(字節輸出流)
FileReader(字符輸入流)
FileWriter(字符輸出流)
對管道進行操做(節點流):
PipedInputStream(字節輸入流)
PipedOutStream(字節輸出流):PipedInputStream的一個實例要和PipedOutputStream的一個實例共同使用,共同完成管道的讀取寫入操做。主要用於線程操做。
PipedReader(字符輸入流)
PipedWriter(字符輸出流)
字節/字符數組流(節點流):
ByteArrayInputStream
ByteArrayOutputStream
CharArrayReader
CharArrayWriter
Buffered緩衝流(處理流):是帶緩衝區的處理流,緩衝區的做用的主要目的是:避免每次和硬盤打交道,提升數據訪問的效率。
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
轉化流(處理流):
InputStreamReader:把字節轉化成字符
OutputStreamWriter:把字節轉化成字符
基本類型數據流(處理流):用於操做基本數據類型值
DataInputStream
DataOutputStream。
由於平時如果咱們輸出一個8個字節的long類型或4個字節的float類型,那怎麼辦呢?能夠一個字節一個字節輸出,也能夠把轉換成字符串輸出,可是這樣轉換費時間,如果直接輸出該多好啊,所以這個數據流就解決了咱們輸出數據類型的困難。數據流能夠直接輸出float類型或long類型,提升了數據讀寫的效率。
打印流(處理流):通常是打印到控制檯,能夠進行控制打印的地方。
PrintStream
PrintWriter
對象流(處理流):把封裝的對象直接輸出,而不是一個個在轉換成字符串再輸出。
ObjectInputStream,對象反序列化
ObjectOutputStream,對象序列化
合併流(處理流):
SequenceInputStream:能夠認爲是一個工具類,將兩個或者多個輸入流當成一個輸入流依次讀取。
File類是對文件系統中文件以及文件夾進行封裝的對象,能夠經過對象的思想來操做文件和文件夾。
File類保存文件或目錄的各類元數據信息,包括文件名、文件長度、最後修改時間、是否可讀、獲取當前文件的路徑名,判斷指定文件是否存在、得到當前目錄中的文件列表,建立、刪除文件和目錄等方法。
該對象並非IO流體系中的一員,其封裝了字節流,同時還封裝了一個緩衝區(字符數組),經過內部的指針來操做字符數組中的數據。 該對象特色:
該對象只能操做文件,因此構造函數接收兩種類型的參數:a.字符串文件路徑;b.File對象。
該對象既能夠對文件進行讀操做,也能進行寫操做,在進行對象實例化時可指定操做模式(r,rw)。
注意:
該對象在實例化時,若是要操做的文件不存在,會自動建立;若是文件存在,寫數據未指定位置,會從頭開始寫,即覆蓋原有的內容。能夠用於多線程下載或多個線程同時寫數據到文件。