流的分類
1.按流的流向分類
輸入流和輸出流
輸入流是從其他地方(硬碟、外部存儲、網絡等)往記憶體中讀取資料。
輸出流是從記憶體往其他地方(硬碟、外部存儲、網絡等)寫入資料。
輸入和輸出流的方向是相對于記憶體而言的
2.按流的傳輸機關分類
位元組流和字元流
位元組流是基于8位的位元組作為操作的資料單元。
字元流是基于16位的字元作為操作的資料單元。
字元流可以看成特殊的位元組流
3.按功能分
節點流和處理流
直接從資料源讀/寫資料的流,稱為節點流。
對一個已經存在的流進行連接配接封裝,通過封裝後的流來實作資料讀/寫功能,即為處理流。
流的基類
1.InputStream
InputStream簡介
InputSteam是位元組輸入流的抽象基類,本身不能建立執行個體來進行輸入,
但是有豐富的子類去實作不同的功能,它類似于一個模闆,是以它的方法将是所有輸入流都可使用的方法
InputStream常用方法
a.從輸入流中讀取單個位元組,傳回所讀取的位元組資料,轉化成為int類型
int read();
b.從輸入流中最多讀取位元組數組b的長度個位元組資料,并且儲存在b中,傳回值表示本次讀取實際讀取的位元組數
int read(byte[] b);
c.從輸入流中最多讀取len個位元組的資料,并存儲在位元組數組b中,并不是從數組的開頭放入的,而是從off位置開始,傳回實際讀取的位元組數
int read(byte[] b, int off, int len);
d.關閉此輸入流并釋放與此流關聯的所有系統資源
void close();
e.跳過和丢棄此輸入流中資料的 n 個位元組,傳回實際跳過的位元組數
long skip(long n);
Reader
Reader簡介
Reader是字元輸入流的抽象基類,和InputStream的用法非常相似,
唯一的差別在于對位元組的操作變成了對字元的操作
Reader常用方法
a.從輸入流中讀取單個字元,傳回所讀取的字元資料,轉化為int類型
int read();
b.從輸入流中最多讀取字元數組c的長度個字元資料,并且儲存在c中,傳回值表示本次讀取實際讀取的字元數
int read(char[] c);
c.從輸入流中最多讀取len個字元的資料,并存儲在字元數組c中,
并不是從數組的開頭放入的,而是從off位置開始,傳回實際讀取的字元數
int read(char[] c, int off, int len);
e.關閉此輸入流并釋放與此流管理的所有系統資源
void close();
f.跳過輸入流中的n個字元,傳回實際跳過的字元數
long skip(long n);
OutputStream
OutputStream簡介
OutputStream是所有位元組輸出流的抽象父類,和InputStream是對應的,它也有自己的一系列方法
OutputStream常用方法
a.将指定的位元組輸出到輸出流中
void write(int c);
b.将位元組數組中的資料輸出到指定的輸出流中
void write(byte[] b);
c. 将位元組數組中的off位置開始,長度為len的位元組輸出到輸出流中
void write(byte[] b, int off, int len);
Writer
Writer簡介
Writer是字元輸出流,和Reader是對應的,基本用法和OutputStream類似,但是因為字元流直接以字元作為操作機關,是以Writer相對于位元組輸出流還多了幾個方法
Writer常用方法
a.将指定的字元輸出到輸出流中
void write(int c);
b.将字元數組中的資料輸出到指定的輸出流
void write(char[] c);
c.将字元數組中從off開始,長度為len的字元資料輸出到輸出流中
void write(char[] c, int off, int len);
d.将str字元串裡包含的字元輸出到指定的輸出流中
void write(String str);
e. 将str字元串裡從off位置開始,長度為len的字元輸出到輸出流中
void write(String str, int off, int len);
常用的流的實作類
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90ERNJTQ65UeFpXTmZEWjZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TM4YzMzEDM0ETMyMDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
RandomAccessFile類
主要功能是完成随機讀寫功能,可以讀取指定位置的内容
構造方法:
public RandomAccessFile (File file,String mode)
public RandomAccessFile (String name,String mode)
第二個參數
檔案的打開模式(mode):
“r” 以隻讀方式打開。調用結果對象的任何 write 方法都将導緻抛出 IOException。
“rw” 打開以便讀取和寫入。如果該檔案尚不存在,則嘗試建立該檔案。
常用方法:
void seek(long pos)設定檔案指針偏移量,在該位置準備開始讀寫。
long getFilePointer()擷取此檔案中的目前偏移量
long length()傳回此檔案的長度。
int skipBytes(int n)嘗試跳過輸入的 n 個位元組并丢棄跳過的位元組.傳回實際跳過的位元組數.
注意:
1.當一個檔案可以用記事本打開并且正常顯示,我們就可以用字元流來處理,也可以直接用位元組流處理,其實字元流就是特殊的位元組流
2.使用IO流切記需要關閉流,釋放資源