一.IO流圖示
二:IO流分析
1.如何判斷使用哪種流?
用系統自帶的記事本打開可以讀懂的可以用字符流,讀不懂的只能用字節流。
2.FileReader和InputStreamReader的關係?
FileReader是InputStreamReader的子類,是InputStreamReader的簡化模式。
3.創建字節流對象做了哪些事情呢?
FileOutputStream fos=new FileOutputStream("a.txt");
①調用系統資源創建文件
②創建字節輸出流對象
③讓字節輸出流指向文件
4.爲什麼要關閉流?
①讓對象變成垃圾,方便垃圾回收器回收
②讓系統釋放與該對象相關的資源
5.緩衝區流
緩衝區有大小,存入一定數據,刷新或關閉流的時候會強制一次性寫入數據,避免多次訪問磁盤,提高效率。
6.字符流=字節流+編碼,字符流本質是包裝了字節流。
7.內存操作流
內存操作流一般用於處理臨時信息,因爲臨時信息不需要保存,使用後就可以刪除,底層是數組。
8.打印輸出流
①只能寫不能讀,用自動刷新功能(帶自動刷新的打印流必須使用println方法),可以操作基本流,也可以操作高效流。
②println方法相當於readLine()、Write()、newLine()的功能。
9.標準輸入輸出流
System的成員變量in、out分別代表標準輸入流和標準輸出流。默認輸入設備是鍵盤,默認輸出設備是顯示器(其實就是控制檯).
10.RandomAccessFile隨機訪問流
①其實隨機訪問流不是流,只是融合了InputStream和OutputStream的功能,可寫可讀。此類的實例支持對隨機訪問文件的讀取和寫入。訪問模式常用"rw" ,打開以便讀取和寫入。若文件不存在,則創建文件。
②隨機訪問流的public long getFilePointer()throws IOException方法可以獲取當前數據的指針。
11.合併流SequenceInputStream和SequenceOutputStream
合併流可以把多個文件內容合併在一起。
構造方法1:SequenceInputStream(InputStream s1, InputStream s2)這個只能合併2個文件
構造方法2:SequenceInputStream(Enumeration<? extends InputStream> e)這個構造方法可以合併多個文件,只要給參爲Enumeration的實現類就行。
①可以用創建元素爲InputStream的Vector集合 Vector<InputStream> v = new Vector<>();根據多態把元素(文本)添加到集合
②調用Vector集合的方法public Enumeration<E> elements()返回的是Enumeration
③創建SequenceOutputStream流,然後讀寫就行.
12.序列化流ObjecIntputStream和ObjectOutputStream
序列化: 把對象像流一樣在文本文件或者網絡中存儲 (一般的格式是與平臺無關的二進制流)對象-----流數據
反序列化: 把文本文件中的流對象或者網絡的流對象還原成對象 流數據-----對象
①序列化的類要實現Serializable接口,Serializable接口是標記接口,沒有方法,只有實現這個序列化標記接口才能實現序列化或者反序列化。
②transient關鍵字,加了這個關鍵字後不能序列化。