JavaSE IO總結

clipboard.png

字節流:

以字節爲單位,8位,可訪問全部類型文件,在寫入時其實是將byte中的二進制數據寫入文件(即便爲byte賦值65,也是將65轉成一串二進制數據,而後寫入,由於全部流都是讀寫二進制數據)數組

字符流:

以字符爲單位,16位Unicode,只可訪問文本文件.網絡

(因爲直接使用字節流時,輸出流會要求將數據轉成二進制數據(即byte類型),在讀取時又只能讀取到byte類型,若是要還原到原始類型則須要手動轉換,同時可能產生讀取的byte不足以轉換爲一個字符(一些字符須要多個字節),此時會產生亂碼.因此對於字符類型,將相應操做封裝起來,創建字符流的輸入/輸出)多線程

(字符流避免了"讀一半"的狀況,讀/寫編碼表不統一的狀況仍需其餘操做進行處理)性能


字節流

FileInputStream和FileOutputStream編碼

獲取文件的輸入流或輸出流,實現對任意文件的讀寫spa

特色:線程

  1. 使用時只須要對應文件的File或者路徑.
  2. 一般做爲其餘OutputStream和InputStream的參數.

FilterInputStream和FilterOutputStreamcode

過濾器輸入流和過濾器輸出流,爲基礎的輸入流和輸出流增長其餘功能.有多種不一樣功能的子類對象


DataIntputStreamblog

數據輸入流容許應用程序以與機器無關方式從底層輸入流中讀取基本 Java 數據類型

DataOutputStream

數據輸出流容許應用程序以適當方式將基本Java數據類型寫入輸出流中。

特色:

  1. 讀取時讀取指定位長的二進制數據,而後轉換爲對應基本類型
  2. 寫入時先將數據轉換爲指定位長的二進制數據,而後再寫入
  3. 使用時須要與其餘OutputStream和InputStream組合使用.

(由於其餘字節流只能讀寫字節和字節數組,例如其餘輸出流寫入65時,文件中顯示的是A)


BufferedInputStream和BufferedOutputStream

特色:

  1. 在內存中設置必定大小的數組做爲緩衝區,在讀/寫時先填充緩衝區,避免屢次讀/寫時頻繁與硬盤交互.
  2. 使用時須要與其餘OutputStream和InputStream組合使用.

PushbackInputStream

特色:

  1. 爲另外一個輸入流添加性能,即「推回 (push back)」或「取消讀取 (unread)」一個字節的能力。
  2. 在讀取終止字節後,代碼片斷能夠「取消讀取」該字節,這樣,輸入流上的下一個讀取操做將會從新讀取被推回的字節。
  3. 使用時須要與其餘InputStream組合使用.

PrintStream

特色:

  1. PrintStream配合其餘輸出流可以方便地打印各類數據值表示形式,便可以調整數據的排版.
  2. 使用時可使用對應文件的File或者路徑.
  3. 也能夠與其餘OutputStream和InputStream組合使用.

ObjectInputStream和ObjectOutputStream

特色:

  1. 能夠讀/寫已經序列化的類的對象.(同時也能夠讀寫基本數據類型)
  2. 經過在流中使用文件能夠實現對象的持久存儲。若是流是網絡套接字流,則能夠在另外一臺主機上或另外一個進程中重構對象。
  3. 使用時須要與其餘OutputStream和InputStream組合使用.

PipedOutputStream和PipedInputStream
管道輸出流和管道輸入流。

特色:

  1. 多線程能夠經過管道進行線程間的通信。在使用管道通訊時,必須將PipedOutputStream和PipedInputStream配套使用
  2. 使用管道通訊時,大體的流程是:在線程A中向PipedOutputStream中寫入數據,這些數據會自動的發送到與PipedOutputStream對應的PipedInputStream中,進而存儲在PipedInputStream的緩衝中;此時,線程B經過讀取PipedInputStream中的數據。就能夠實現,線程A和線程B的通訊。

ByteArrayInputStream和ByteArrayOutputStream

內存輸入流和內存輸出流

在內存中設置必定長度的數組做爲緩衝區

特色:

  1. ByteArrayOutputStream在向緩衝區寫入數據時,當緩衝區已滿載則緩衝區自動增長長度.
  2. 主要是爲了臨時處理數據使用.
  3. 沒法與其餘輸入流和輸出流配合使用.

SequenceInputStream

特色:

多個輸入流合併爲一個輸入流,在讀入時,當前輸入流讀入完畢自動轉入下一個輸入流進行讀取


字符流

BufferedReader和BufferedWriter

組合其餘Reader和Writer使用

能夠讀取一行


InputStreamReader和OutputStreamWriter

轉換流,將字節流裝飾爲字符流

InputStreamReader 是字節流通向字符流的橋樑

OutputStreamWriter 是字符流通向字節流的橋樑

在構造時須要InputStream和OutputStream


FileReader和FileWriter


StringReader和StringWriter

相似ByteArrayInputStream和ByteArrayOutputStream,可是緩衝區是一個String


PipedReader和PipedWriter
管道字節輸入輸出流


CharArrayReader和CharArrayReader

相似ByteArrayInputStream和ByteArrayOutputStream,可是緩衝區是一個char[]


PushbackReader

增長推回,組合其餘Reader使用

相關文章
相關標籤/搜索