1. 程式人生 > 其它 >Java IO流詳解:重點

Java IO流詳解:重點

Java IO流詳解:重點

  • 資料流的基本概念:

    • 把不同型別的輸入,輸出源抽象為:流(Stream)

    • 其中,輸入或輸出的資料稱為資料流(Data Stream),用統一的介面來表示;

 

  • IO流的分類:

    • 資料流是指一組有順序的,有起點和終點的位元組集合

    • 按照流的流向,可以分為輸入流和輸出流;,其中輸入,輸出是針對程式來說的;

       

    • 按照處理單位的不同,分為:位元組流和字元流:

      • 位元組流:每次讀取一個位元組,當傳輸的檔案中中文時,就會出現亂碼;

      • 字元流:每次讀取2個位元組,有中文時,使用該流就可以正確傳輸顯示中文;

        (1字元=2個位元組,1位元組=8位,一個漢字佔2個位元組)

         

    • 按照角色劃分:分為:節點流和處理流:

      • 節點流:從或向一個特定的地方(節點)讀寫資料;如FileInputStream;

      • 處理流(包裝流):

        • 是對一個已經存在的流的連線和封裝;

        • 通過所封裝的流的功能呼叫實現資料讀寫;

        • 處理流的構造方法總是要帶一個其他的流物件做引數;

           

    • Java IO流有4個抽象基類:其他流都是繼承這4大基類;

      • 位元組流, 字元流

      • 輸入流:位元組輸入流,字元輸入流

      • 輸出流:位元組輸出流,字元輸出流

         

  • 如何選擇適合自己的流:

    • 首先要知道是選擇輸入流還是輸出流;

    • 然後考慮你傳輸資料時,是每次傳一個位元組就選位元組流;如果存在中文,肯定選字元流;

    • 根據前面2步,就可以選出一個合適的節點流;如果需要在此基礎上增強,那麼就在處理流中挑選一個即可;

 

  • 位元組輸入流:inputStream

    • InputStream抽象類:常用方法

      //inputstream類中常用方法:

      //1, int read():從輸入流中讀取一個位元組的二進位制資料;
      //2,int read(byte[] b):將多個位元組讀取到陣列中,填滿整個陣列;
      //3,int read(byte[] int off, int len):從輸入流讀取長度位len的資料,從陣列b中下標為off的位置開始放置讀入的資料,讀完返回讀取的位元組數;
      //4,void close():關閉流資料;

       

    • 位元組輸入流有很多子類:常用的有:

       

    • ByteArrayInputStream:位元組陣列輸入流

      • ,該類的功能就是從位元組陣列byte[] 中進行以位元組為單位的讀取;

      • 也就是將資原始檔都以位元組形式存入到該類中的位元組陣列中去

      • 我們拿資料也是從這個位元組陣列中拿;

    • PipedInputStream:管道位元組輸入流

      • 它和PipedOutputStream一起使用,能實現多執行緒間的管道通訊;

    • FilterInputStream:裝飾著模式中充當裝飾者的角色

      • 具體的裝飾者都要繼承它,所以在該類的子類下都是用來裝飾別的流的,也就是處理類;

    • BufferedInputStream:緩衝流

      • 對處理流進行裝飾,增強,內部會有一個緩衝區,用來存放位元組,每次都素將緩衝區存滿後傳送,而不是一個位元組或2個位元組這樣傳送,效率更高;

    • DataInputSteam:資料輸入流:

      • 用來裝飾其他輸入流,它允許通過資料流來讀寫Java基本型別;

    • FileInputStream:檔案輸入流:

      • 通常用來對檔案進行讀取操作;

    • File:對指定目錄的檔案進行操作:

      • 對指定目錄的檔案進行操作:增,刪,改,查!

    • ObjectInputStream:物件輸入流:

      • 用來提供對基本資料或物件的持久儲存;

      • 序列化,反序列化;