IO流 輸入輸出的簡單例項

2022-02-10 14:26:32 字數 1587 閱讀 8916

抽象類inputstream和outputstream是io流最底層的兩個抽象類,所有輸入/輸出流的類都基於這兩個類.

這兩個類裡最核心的三個方法是read()和write(),以及close()

read() : inputstream類裡的方法, 負責讀取內容到輸入流

write() : outputstream類裡的方法, 負責將內容輸出.

close() : 兩個類裡都有這個方法, 負責關閉流,先關閉輸入流,再關閉輸出流

read()有3個過載方法,分別是:

public abstract int read() throws ioexception : 每次讀取1位元組,以int形式返回這一位元組的資料內容,全部讀取完成時返回-1表示讀取完畢

public int read(byte b) throws ioexception : 讀取資料到傳入的byte陣列中,返回讀取的位元組數,全部讀取完畢時返回-1,該方法相當於read(b, 0, b.length)

public int read(byte b, int off, int len) throws ioexception : off:表示從陣列中的第幾位開始儲存資料 len:表示陣列中使用的位元組數. b.length= off+len+剩餘的位元組數 ,返回值等同於read(byte b)

***乙個byte型別變數是1個位元組,所以new byte[1024]是1kb(1024位元組),1個英文本母或數字對應1位元組容量***

@test

public void test()

//最後一定記得關閉輸入輸出流,先輸入,在輸出

instream.close();

outstream.close();

} catch (filenotfoundexception e) catch (ioexception e)

}

注意:

1.如果檔案體積小於byte陣列(),輸出時仍將完整的輸出byte陣列中的資料,包括未賦值的null,看下圖

檔案體積6位元組,byte陣列容量調整為8位元組.

2.如果檔案體積大於byte陣列,但最後一次讀取的資料體積小於byte陣列,這將造成一些問題,因為byte陣列在賦值前並未被清空,所以byte陣列中仍會保留一部分上次迴圈中儲存的資料.看下圖

檔案體積6位元組,把byte陣列容量調成5位元組,可以看到,byte陣列中未被覆蓋的資料(上次迴圈時的資料)在第二次迴圈中被輸出(紅框部分)

還是上邊的**,read(byte b)改成用read(byte b, int off, int len)方法,其他不變,羅列情況如下

1.檔案體積6位元組,byte陣列容量8位元組,read(b, 0, 8)

2.檔案體積6位元組,byte陣列容量8位元組,read(b, 1, 6)

3.檔案體積6位元組,byte陣列容量8位元組,read(b, 1, 8)

陣列下標越界,因為1+8>b.length

輸入輸出流(IO流

流 流 stream 的概念源於 unix 中管道 pipe 的概念,在 unix 中,管道是一條不間斷的位元組流,用來實現程式或程序間的通訊,或讀寫外圍裝置 外部檔案等。重要 1.流操作結束後必須關閉。2.inputstream reader outputstream write全是抽象,不能直接...

IO 輸入輸出流

io流 輸入流位元組輸入流 inputstream fileinputstream 構造方法 fileinputstream file file fileinputstream string filename bufferedinputstream 成員方法 int read 讀乙個位元組 int ...

輸入輸出流(IO)

outputstream,所有輸出位元組流的基類,抽象類 字元流 位元組流 編碼 解碼 writer,所有輸出字元流的基類,抽象類 什麼情況下使用字元流 如果讀寫需要編碼和解碼的資料 字元資料 這時候我們就使用字元流 轉換流的作用 可以把對應的位元組流轉換成字元流使用。將輸入控制台的一行字元資料顯示...