java IO流-學習整理彙總

java IO流java

    1:概念
數組

        java中的流,他的概念源於unix中管道(pipe)的概念,在unix中,管道是一條不間斷的字節流,用於實現程序或者進程之間的通訊,或者讀寫外圍設備,外圍文件等。
緩存

    2:分類網絡

        輸入輸出流:根據文件流的流向,分爲輸入流和輸出流,
編碼

        字節流和字符流:針對處理的對象是字符仍是字節,分爲字符流和字節流,操作系統

            字節流:通常讀入或讀出的是8位二進制數據,InputStream是全部字節輸入流的祖先,OutPutStream是全部輸出流的祖先。
unix

            字符流:通常讀入或讀出的是16位二進制數據,Reader是全部讀取字符輸入流的祖先,Writer是全部字符輸出流的祖先。
code

            結合上面所說的輸入輸出流,簡單分類,
視頻

                                    字符流                         字節流對象

            輸入流            Reader                    InputStream

            輸出流            Writer                     OutPutStream

        節點流和處理流:節點流是在程序中直接和源文件相連,讀入或者讀出,處理流就是與節點流一塊使用,在節點流的基礎上再套上一層,套上的就是處理流

        其中須要注意的是在日常操做中如何判斷使用字符流仍是字節流,字符流通常都是讀入或者讀出的單位是一個字符,通常遇到中文的就用字符流,由於中文一個字節裝不下,若是採用字節流,那麼讀入的將會是半個中文,操做系統不認識,只能顯示問號,遇到其餘圖片,媒體,視頻等就用字節流。通俗點就是遇到中文的就用字符流,其餘字節流。

3:詳解:

    

上面圖是一個簡單表關係,是上次從別人那看到不錯就粘貼過來了,很形象。下面就java中的字節流和字符流進行簡單的介紹:

java 中的字節流:

        FileInputStream和FileOutPutStream

         他們都是節點流,input流的源端和out的目的端都是磁盤文件,他們的構造方法容許經過文件的路徑名來構造相應的流

          FileInputStream fis = new FileInputStream("c://123.txt");要注意的是123.txt文件必須存在並且要保證是可讀的。

          FileOutPutStream fos = new FileOutPutStream("c://345.txt");若輸出文件已經存在了,那麼必須是能夠覆蓋的,若是不存在,則會建立。

        BufferedInputStream和BufferedOutputStream,他們是帶有緩衝區的input和output,他們分別繼承了FileInputStream和FileOutPutStream,

java中的字符流:

        字符流是主要用來處理字符的,java採用16位的Unicode來表示字符串和字符,對應的字符流的輸入和輸出分別是Reader和Writer,

    其中FileReader和FileWriter分別繼承了Reader和Writer,屬於節點流

    其中InputStreamReader和InputStreamWtirer,他們是處理流,協助節點流進行處理,在構造這兩個類的對應流時,他們會自動進行轉換,將平臺缺省的編碼格式設置爲Unicode編碼格式,對英文環境而言,缺省編碼格式爲ISO8859-1。

    BufferedReader和BufferedWriter兩個類對應的流使用了緩衝,能大大提升輸入輸出的效率。他也是處理流。

其他還有不少對象,那些都是衍生出來的,針對數組,管道和對象操做的這裏就沒有詳談。

使用規則:

    下面簡單介紹一下在那種狀況下使用那種流

1:根據文件:

    文件:FileInputStream,FileOutPutStream(字節流),FileReader,FileWriter(字符流,帶中文)

    byte[]:ByteArrayInputStream,ByteArrayOutPutStream(字節流)

    char[]:CharArrayReader,CharArrayWriter(字符流)

    String:StringBufferInputStream,StringBufferOutPutStream(字節流),StringWriter,StringReader(字符流)

    網絡數據流:InputStream,OutPutStream(字符流),Reader,Writer(字符流)

2:按是否格式化輸出區分:

    要格式化輸出:PrintStream,PrintWriter

3:按是否緩存區分:

    BufferedInputStream,BufferedOutPutStream(字節流),BufferedReader,BufferWriter(字符流)

4:按照數據格式區分

    二進制格式(只要不能肯定是純文本格式的)InputStream,OutPutStream以及Stream的子類

    純文本格式(含英文以及中文或者其餘編碼格式)Reader,Wrtiter以及Reader,Writer的子類

5:輸入輸出區分

    輸入流:Reader,InputStream的子類

    輸出流:Writer,OutPutStream的子類

6:特殊需求區分:

    從stream到Reader,Writer的轉換類:InputStreamReader,OutPutStreamReader

    對象輸入輸出:ObjectInputStream,ObjectOutPutStream

    進程之間通訊:PipeInputStream,PipeOutPutStream,PipeWriter,PipeReader

    序列化的:SequenceInputStream

決定選取那種類以及他的構造進程規則通常以下:

首先考慮原始數據格式

其次考慮是輸入仍是輸出

在這考慮是否須要轉換流

還要考慮數據去向

考慮是否須要緩衝

以上只是我本身結合網上的一些整理的,若是有什麼不妥或者錯誤的地方,敬請指出,謝謝。

相關文章
相關標籤/搜索