天天看點

Java基礎知識-IO流(八)

流的分類

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);
           

常用的流的實作類

Java基礎知識-IO流(八)
Java基礎知識-IO流(八)
Java基礎知識-IO流(八)
Java基礎知識-IO流(八)
Java基礎知識-IO流(八)
Java基礎知識-IO流(八)

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流切記需要關閉流,釋放資源