【Java IO】初識字節流和字符流

        說到IO,在咱們工做中是常常遇到的,好比文件的上傳、網絡的數據傳輸、系統的日誌記錄等,俯拾皆是。Java裏面是怎麼實現IO的,今天咱們一塊兒學習下。java

        Java種IO是經過流的方式實現的,流能夠理解爲一個序列的數據,Java中定義了字節流和字符流,字節流顧名思義它處理的基本單位就是字節,字符流處理的基本單元是Unicode碼元(1字符=2字節),String類型叫作字符串,字符串在內存裏也是Unicode的碼元。流還有另一種分類方法,就是輸入流和輸出流,把對象(文件、圖片等)讀入程序中須要用輸入流,程序中須要寫入文件時須要用輸出流,這只是一個方向的問題。下面作下簡單整理:設計模式

  • 按照處理的基本單元分類:
  1. 字節流:處理單元爲字節
  2. 字符流:處理單元爲Unicode碼元
  • 按照讀取、寫入的流的方向分類:
  1. 輸入流:能夠理解問將文件讀取到程序中的流
  2. 輸出流:能夠理解爲從程序中寫入到文件中的流

        JDK中java.io包下是關於io操做的類。按照上面的分類,看下都有哪些類,下圖是我收藏的一張關於JDK中IO部分的分類:數組

1. 字符流網絡

  • Reader:Reader是一個抽象類,它實現了Readable、Closeable接口,它的子類有如下幾類:

        StringReader、CharArrayReader是主要的介質類,分別從String和Char數組中讀取數據;學習

        PipedReader是一個管道流,是從與其餘線程共用的管道中讀取數據;編碼

        BufferedReader是一個裝飾器類(若是對裝飾者模式不熟悉的,能夠查看個人設計模式篇中的裝飾者模式的介紹),spa

        FilterReader是個抽象類,他是PushbackReader類的父類。線程

        InputStreamReader是鏈接字符流和字節流的橋樑,它能夠將字節流轉換爲字符流。FileReader就是它的一個子類,實現了將文件的輸入字節流轉換爲輸入字符流的功能。設計

  • Writer:是全部輸出流的父類,是一個抽象類,它實現了Apenderable、Closeable和Flushable接口

        CharArrayWriter、StringWriter是兩種基本的介質流,分別面向Char數組、String寫入數據。日誌

        PipedWriter是一個管道輸出流,向與其餘共用的管道中寫入數據

        BufferedWriter是一個裝飾器類,爲Writer子類提供緩衝功能。

        OutputStreamWriter是OutputStream到Writer轉換的橋樑,FileWriter是它的子類,實現了將文件輸出字節流轉換爲輸出字符流的功能。

2. 字節流

  • 輸入字節流InputStream ,是全部字節輸入流的父類,是一個抽象類,實現了Closeable接口

        FileInputStream、StringBufferInputStream、ByteArrayInputStream是字節輸入流的三個介質類,分別從本地文件、String緩衝區、Byte數組中讀取數據;其中的StringBufferInput已經再也不建議使用了

        FilterInputStream是裝飾器類的父類,下面有BufferedInputStream、DataInputStream、PushbackInputStream

        ObjectInpuStream、SequenceInputStream都是裝飾器類

        PipedInputStream是一個管道字節流, 是從與其它線程共用的管道中讀取數據

  • 輸出字節流OutputStream,是全部字節輸出流的父類,是一個抽象類,實現了Closeable、Flushable接口

        FileOutputStream、ByteArrayOutputStream是兩個基本的介質流類,分別向本地文件、byte數組寫入數據。PipedOutputStream是向與其餘線程共用的管道中寫入數據。

        ObjectOutputStream及FilterOutputStream的子類都是裝飾器類。

3. 字節流和字符流的使用場景

        JDK早期版本中就提供了字節流和字符流的兩種處理方式,字符流的處理單位是碼元,效率比字節要高一些,可是並不表明字符流就比字節流具備優點。好比常見的圖片,由於它的編碼格式和常規的字符編碼格式不一致,因此字符流對於圖片這類文件就顯者一籌莫展了。字節流和字符流各具優點,不能互相代替。

        這一篇,對IO部分有了初步的認識,下篇將介紹IO的發展史,什麼是BIO、NIO、AIO。歡迎關注。

相關文章
相關標籤/搜索