黑馬程序員_IO流的要點整理

---------------------- android培訓 、 java培訓 、 期待與您交流! ----------------------


1、 IO(Input Output)流IO流用來處理設備之間的數據傳輸

        在讀寫字符串時,如果在構造時,傳入第二個參數爲true,將原有文件末尾進行讀寫

        close()和flush()的區別?
         a.調用flush,可以將數據刷到目的地中,流依然存在,可以繼續使用,
           調用close,可以將數據刷到目的地中,流已被關閉,不能繼續使用,最後使用。
         b.close不僅刷新緩衝區,還關閉底層資源

        創建讀取對象,和數據源先相關聯

2、 裝飾模式:爲了解決給類功能進行增強而出現的。
    
        裝飾類和被裝飾的特點:

        a.裝飾類中的構造函數需要接受被裝飾。
        b.裝飾類和被裝飾類應該屬於同一個體系
    
         * 裝飾模式:爲了解決給類的功能進行增強而出現的。
         * Writer
         *         |--TextWriter
         *         |--MediaWriter
         * 想要對流對象的功能進行增強,比如提高寫入的效率。
         * 使用緩衝技術。
         * Writer
         *         |--TextWriter
         *                 |--BufferedTextWriter
         *         |--MediaWriter
         *                 |--BufferedMediaWriter
         * 每一個子類這樣實現是可以的,但是導致繼承體系較爲臃腫。
         * 發現其實無論哪個子類需要高效,使用的都是緩衝技術。
         * 乾脆將緩衝技術進行單獨的描述和封裝。
         * 要緩衝區誰,就將誰傳給緩衝區。
         * BufferdWriter
         * class BufferedWriter extends Writer
         * {
         *         BufferedWriter(Writer w)
         *         {}
         * }
         * 裝飾設計模式。
         * Writer
         *         |--TextWriter
         *         |--MediaWriter
         *         |--BufferedWriter
         * 裝飾類和被裝飾的特點:
         * 1,裝飾類中的構造函數需要接受被裝飾類。
         * 2,裝飾類和被裝飾類應該所屬於同一個體系。

3、 輸入/輸出流

        FileOutputStream 輸出流
        FileInputStream  輸入流

        available  獲取字節數  以他作爲緩衝區的長度是不合適的

4、 轉換流:是字符和字節之間的轉換橋樑

       InputStreamReader
        OutputStreamWriter

        字符能看懂,字節看不懂
        轉換流:字節流+編碼表(可以指定)

        ---用於操作File的子類:字節流+本地默認碼錶(固定)。對默認編碼的字符文件操作起來比父類根爲便捷

5、 IO流的操作規律
        字符流:對字符流操作的對象
        FileReader
        FileWriter
        BufferedReader
        BufferedWriter
        InputStreamReader
        OutputStreamWriter

        字節流:對字節流操作的對象
        FileInputStream
        FileOutputStream
        BufferedInputStream
        BufferedOutputStream

       問題:開始時,用哪個流對象解決問題?

        明確一:明確源和目的。
              源:就需要使用輸入體系。InputStream    Reader
              目的:就需要寫,就需要使用輸出體系。OutputStream Writer

       明確二:處理的數據是否是存文本數據。
              是:就是使用字符流。
              源:Reader
              目的:Writer

        否:就是字節流。

               源:InputStream

                目的:OutputStream

        兩個明確都確定後,可以確定需要使用哪個體系。
       明確三:具體是哪個設備。明確設備的目的是爲了確定具體的對象。
              設備源:
              鍵盤,System.in
              硬盤,操作文件的對象。File開頭的流對象。
              內存,數組。
              網絡,Socket

       目的設備:
              硬盤,操作文件的對象。File開頭的流對象。
              屏幕(控制檯)System.out
              內存,數組。
              網絡,Socket

       明確四:是否需要額外功能?
              需要高效嗎?Buffered
              需要字節和字符之間的橋樑嗎?轉換流

6、 list():列出當前目錄下的文件及文件夾的名稱。 目錄不存在反對空
       對一個目錄使用list前建議先判斷。

7、 遞歸:函數自身調用自身。功能在內部有進行復用,下次功能實用到了上次功能的運算的內容。
       注意;
       a. 一定要定義條件。
       b. 要控制遞歸次數。

       dir.list();獲取的是路徑
       dir.listFiles();獲取的是路徑對象

8、 Propertise:map中的Hashtable子類
        a. 是一個雙列集合。map中的方法都是可以用。
       b. 持久的屬性集,數據的生命週期較長。
       c. Properties 可保存在流中加載
       d. 鍵值都是字符串類型

9、 PrintStream: 打印流
       特點:
       a. 給字節輸出流提供了打印方法。
       b. 方便打印數值表現形式。
       c. 構造函數接受File對象,字符串路徑,OutputStream.
    
       write寫出一個int,只將最低一個字節寫出。
       print將數值表現形式不變,寫到目的地中。都將數據轉成字符串。


10、 能操作對象的流對象
       ObjiecInputStream
       ObjectOutputStream

       關鍵字: transient 瞬態

       RandomAccessFile
       a. 既可以讀取,又可以寫入
       b. 只對文件操作;
       c. 內部維護了一個大型數組,將字節輸入流和字節輸出流進行封裝。
       d. 通過索引的方式對數組中的元素進行操作,獲取和設置索引的方法是getFilePointer,seek.
       e. 隨機的訪問的原理:就是通過操作索引的方法對指針進行自定義的指定位置來進行讀寫
       f. 讀取時,讀取的字節要有規律

11、 操作基本數據類型值得流對象
       a. write(int):將一個整數的四個字節中的最低字節寫入到目的地
       b. print(int):將一個整數的表現形式寫入到目的地。你寫的是什麼,到目的地就是什麼。
       c. writeInt(int):將一個整數的四個字節寫入到目的地。

12、 編碼和解碼
       字符串--->字節數組:編碼
       字節數組--->字符串:解碼
    
       String str="你好";
       編碼:
       byte[]arr=str.getBytes("UTF-8");

       解碼:
       String s1=new String(arr,"GBK");
    
       原則:
       a.  編碼編錯了,就不用解碼了。
       b. 解碼解錯還有可能更正

        注意會解釋“聯通”的問題


---------------------- android培訓 、 java培訓 、 期待與您交流! ----------------------
詳細請查看:www.itheima.com
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章