1. 程式人生 > >[Java] 各種流的分類及區別

[Java] 各種流的分類及區別

https://www.cnblogs.com/lca1826/p/6427177.html

 

流在Java中是指計算中流動的緩衝區。

從外部裝置流向中央處理器的資料流成為“輸入流”,反之成為“輸出流”。

字元流和位元組流的主要區別:

 1.位元組流讀取的時候,讀到一個位元組就返回一個位元組;字元流使用了位元組流讀到一個或多個位元組(中文對應的位元組數是兩個,在UTF-8碼錶中是3個位元組)時。先去查指定的編碼表,將查到的字元返回。

 2.位元組流可以處理所有型別資料,如:圖片,MP3,AVI視訊檔案,而字元流只能處理字元資料。只要是處理純文字資料,就要優先考慮使用字元流,除此之外都用位元組流。

1.位元組流:

位元組輸入流類:FileInputStream、BufferedInputStream和DataInputStream

FileInputStream:此類用於從本地檔案系統中讀取檔案內容。

構造方法:

·FileInputStream(File file):開啟一個到實際檔案的連線來建立一個FileInputStream,該檔案通過檔案系統中的File物件file指定。

·FileInputStream(String name):開啟一個到實際檔案的連線來建立一個FileInputStream,該檔案通過檔案系統中的路徑名name指定。

常用方法:

·int available():返回下一次對此輸入流呼叫的方法不受阻塞地從此輸入流讀取(或跳過)的估計剩餘位元組數。

·void close():關閉此檔案輸入流並釋放與該流關聯的所有系統資源。

BufferedInputStream:此類本身帶有一個緩衝區,在讀取資料時,先放到緩衝區中,可以減少對資料來源的訪問,提高執行的效率。

構造方法:

·BufferedInputStream(InputStream in):建立一個BufferedInputStream並儲存其引數,即輸入流in,以便將來使用。

·BufferedInputStream(InputStream in,int size):建立一個具有指定緩衝區大小的BufferedInputStream並儲存其引數,即輸入流in,以便將來使用。

常用方法:

·int available():返回下一次對此輸入流呼叫的方法不受阻塞地從此輸入流讀取(或跳過)的估計剩餘位元組數。

·void close():關閉此輸入流並釋放與該流關聯的所有系統資源。

·int read():從輸入流中讀取資料的下一個位元組。

·int read(byte[] b,int off,int len):從此位元組輸入流中給定偏移量處開始將各位元組讀取到指定的byte陣列中。

 DataInputStream:該類提供一些基於多位元組讀取方法,從而可以讀取基本資料型別的資料。

構造方法:

·DataInputStream(InputStream in):使用指定的底層InputStream建立一個DataInputStream。

常用方法:

·int read(byte[] b):從包含的輸入流中讀取一定數量的位元組,並將它們儲存到緩衝區陣列b中。

·int read(byte[] b,int off,int len):從包含的輸入流中將最多len個位元組讀入一個byte陣列中。

位元組輸出流類:FileOutputStream、BufferedOutputStream和DataOutputStream

FileOutputStream:此類用於從本地檔案系統的檔案中寫入資料。

構造方法:

·FileOutputStream(File file):建立一個向指定File物件表示的檔案中寫入資料的檔案輸出流。

·FileOutputStream(String name):建立一個向具有指定名稱的檔案中寫入資料的輸出檔案流。

常用方法:

·void close():關閉此檔案輸出流並釋放與此流有關的所有系統資源。

·FileDescriptor getFD():返回與此流有關的檔案描述符。

·void write(byte[] b):將b.length個位元組從指定byte陣列寫入此檔案輸出流中。

·void write(byte[] b,int off,int len):將指定byte陣列中從偏移量off開始的len個位元組寫入此檔案輸出流。

·void write(int b):將指定位元組寫入此檔案輸出流。

BufferedOutputStream:此類本身帶有一個緩衝區,在寫入資料時,先放到緩衝區中,實現緩衝的資料流。

構造方法:

·BufferedOutputStream(OutputStream out):建立一個新的緩衝輸出流,來將資料寫入指定的底層輸入流。

·BufferedOutputStream(OutputStream out,int size):建立一個新的緩衝輸出流,來將具有指定緩衝區大小的資料寫入指定的底層輸出流。

常用方法:

·void flush():重新整理此緩衝的輸出流。

·void write(byte[] b,int off,int len):將指定byte陣列中從偏移量off開始的len個位元組寫入此緩衝的輸出流。

·void write(int b):將指定的位元組寫入此緩衝的輸出流。

DataOutputStream(OutputStream out):建立一個新的資料輸出流,將資料寫入指定基礎輸出流。

常用方法:

·void flush():清空此資料輸出流。

·int size():返回計數器written的當前值,即到目前為止寫入此資料輸出流的位元組數。

·void write(byte[] b,int off,int len):將指定byte陣列中從偏移量off開始的len個位元組寫入基礎輸出流。

·void write(int b):將指定位元組(引數b的八個低位)寫入基礎輸出流。

2.字元流:

FileReader:用來讀取字元檔案的便捷類。此類的構造方法假定預設字元編碼和預設位元組緩衝區大小都是適當的。

構造方法:

·FileReader(File file):在給定從中讀取資料的File的情況下建立一個新的FileReader。

·FileReader(String fileName):在給定從中讀取資料的檔名的情況下建立一個新的FileReader。

BufferedReader類是Reader類的子類,為Reader物件新增字元緩衝器,為資料輸入分配記憶體儲存空間,存取資料更為有效。

構造方法:

·BufferedReader(Reader in):建立一個使用預設大小輸入緩衝區的緩衝字元輸入流。

·BufferedReader(Reader in,int sz):建立一個使用指定大小輸入緩衝區的緩衝字元輸入流。

操作方法:

·void close():關閉該流並釋放與之關聯的所有資源。

·void mark(int readAheadLimit):標記流中的當前為止。

·boolean markSupported();判斷此流是否支援mark()操作。

·int read():讀取單個字元。

·int read(char[] cbuf,int off,int len):將字元讀入陣列的某一部分。

·String readLine():讀取一個文字行。

·boolean ready():判斷此流是否已準備好被讀取。

·void reset():將流重置到最新的標記。

·long skip(long n):跳過字元。

FileWriter:用來寫入字元檔案的便捷類,可用於寫入字元流。

構造方法:

·FileWriter(File file):根據給定的File物件構造一個FileWriter物件。

·FileWriter(String filename):根據給定的檔名構造一個FileWriter物件。

BufferedWriter:將文字寫入字元輸出流,緩衝各個字元,從而提供單個字元、陣列和字串的高效寫入。