IO流相關(guān)

Java.IO 包中定義了多個(gè)流類(lèi)型 (類(lèi)和抽象類(lèi)) 來(lái)實(shí)現(xiàn)輸入\輸出功能,
按數(shù)據(jù)流的方向不同可以分為輸入和輸出流
按處理數(shù)據(jù)單位不同可以分為字節(jié)流和字符流
按照功能的不同可以分為節(jié)點(diǎn)流和處理流

字節(jié)流 :完完全全按照二進(jìn)制編碼格式一個(gè)字節(jié)一個(gè)字節(jié)來(lái)讀的。
輸入流    InputStream         輸出流 OutputStream

字符流是按照一個(gè)字符一個(gè)字符來(lái)讀的,一個(gè)字符等于兩個(gè)字節(jié)。    會(huì)將讀取的字節(jié)數(shù)據(jù)根據(jù)當(dāng)前使用的字符進(jìn)行編譯
字符流 = 字節(jié)流+解碼。
輸入流    Reader      輸出流   Writer              

只考慮文件操作情況下:
讀取操作是:input \ read 從硬盤(pán)(存儲(chǔ)設(shè)備) 到 內(nèi)存
寫(xiě)入操作是:output \ write 從內(nèi)存 到 硬盤(pán)(存儲(chǔ)設(shè)備)

節(jié)點(diǎn)流
節(jié)點(diǎn)流就相當(dāng)于一根管道直接插到數(shù)據(jù)源上面,直接讀數(shù)據(jù)源里面的數(shù)據(jù),或者直接往數(shù)據(jù)源里面寫(xiě)入數(shù)據(jù)。
典型的節(jié)點(diǎn)流是文件流:文件的字節(jié)輸入流(FileInputStream) 文件的字節(jié)輸出流(FileOutputstream)
文件的字符輸入流(FileReader),文件的字符輸出流(FileWriter)

處理流
處理流是”連接“在已存在的流(節(jié)點(diǎn)流或者處理流)之上,通過(guò)對(duì)數(shù)據(jù)的處理為程序提供更為強(qiáng)大的讀寫(xiě)功能。

InputStream 輸入流
繼承自InputStream的都是用于向程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字節(jié)(8 bit);
具體方法
//讀取一個(gè)字節(jié)并以整數(shù)的形式返回
//如果返回-1 已到輸入流的末尾
int read() throws IOException

    //讀取一系列字節(jié)并存儲(chǔ)到一個(gè)數(shù)組buffer
    //返回存儲(chǔ)了讀取的字節(jié)的byte數(shù)組, 如果返回-1 已到輸入流的末尾
    int read (byte[] buffer)     throws IOException
    
    close 關(guān)閉流,釋放資源
read方法是一個(gè)字節(jié)一個(gè)字節(jié)的讀。
read(byte[] buffer)方法是讀取是先把數(shù)據(jù)讀取到byte數(shù)組buffer里面,然后處理里面的數(shù)據(jù)。

OutputStream 輸出流
繼承自O(shè)utputStream的都是用于向程序中輸出數(shù)據(jù),且數(shù)據(jù)的單位為字節(jié)(8 bit);
具體方法
//向輸出流中寫(xiě)入一個(gè)字節(jié),該字節(jié)數(shù)據(jù)為參數(shù)b的低八位
write(int b) throws IOException
//將一個(gè)字節(jié)類(lèi)型的數(shù)組中的數(shù)據(jù)寫(xiě)入流
write(byte[]b) throws IOException
//將一個(gè)字節(jié)型的數(shù)組中的從指定位置開(kāi)始的len個(gè)字節(jié)寫(xiě)入到輸出流
write(byte[]b,int off,int len) throws IOException
//關(guān)閉釋放內(nèi)存資源
close(); throws IOException
//將輸出流中緩沖的數(shù)據(jù)全部寫(xiě)出到目標(biāo)文件
flush() throws IOException

Reader 流
和InputStream 一模一樣,唯一的區(qū)別在于讀取的數(shù)據(jù)單位不同。繼承自Reader的流都是向程序中
輸入數(shù)據(jù),數(shù)據(jù)單位都是16bit
一個(gè)字符就是兩個(gè)字節(jié) 這種一個(gè)字符一個(gè)字符讀取的方式有它存在的必要性 比如中文在Unicode碼中中文占兩個(gè)
字節(jié) ,如果使用字節(jié)流來(lái)讀一次只能讀半個(gè)字。使用字符流就可以避免這個(gè)問(wèn)題。

//讀取一個(gè)字符并以整數(shù)形式返回  如果返回-1 已到輸入流的末尾
read()        返回int類(lèi)型  拋IO異常

//讀取一些字符并且儲(chǔ)存到一個(gè)buffer數(shù)組中  
//返回實(shí)際讀取的字符數(shù) 如果返回-1 已到輸入流的末尾
read(char[] rea)  返回int類(lèi)型  拋IO異常

//關(guān)閉流釋放資源
close()   無(wú)返回值 拋IO異常

//跳過(guò)n個(gè)字符不讀  返回實(shí)際跳過(guò)的字節(jié)數(shù)
skip(long n)   返回long類(lèi)型  拋IO異常

Writer 流
//向輸出流中寫(xiě)入一個(gè)數(shù)據(jù)
write(int c); 無(wú)返回值 拋IO異常

//將一個(gè)字符型的數(shù)組寫(xiě)入輸出流
write(char[] c);    無(wú)返回值 拋IO異常

//將一個(gè)字符數(shù)組從指定位置開(kāi)始(offset)的指定長(zhǎng)度(length)個(gè)字符寫(xiě)入輸出流
write(char[] ,intoffset, int length);    無(wú)返回值 拋IO異常

//將一個(gè)字符串中的字符寫(xiě)入到輸出流
write(String string); 無(wú)返回值 拋IO異常

//將一個(gè)字符串從offset開(kāi)始的length個(gè)字符寫(xiě)入到輸出流
write(String string,int offset, int length)    無(wú)返回值 拋IO異常

//關(guān)閉流釋放資源
close();

處理流
1、緩沖流,緩沖流要“套接”在相應(yīng)的節(jié)點(diǎn)流之上,對(duì)讀寫(xiě)的數(shù)據(jù)提供了緩沖的功能,提高了讀寫(xiě)的效率,同時(shí)增加一些方法。
緩沖流是指帶有緩沖區(qū)的,緩沖區(qū)(Buffer)就是內(nèi)存里面的一小塊區(qū)域,讀寫(xiě)時(shí)都把數(shù)據(jù)放到這塊緩沖區(qū)域里面,減少io對(duì)于硬盤(pán)的訪問(wèn)次數(shù)。
先把數(shù)據(jù)放置到緩沖區(qū)上,等到緩沖區(qū)滿了以后,再 一次把緩沖區(qū)里面的數(shù)據(jù)寫(xiě)入硬盤(pán)或者讀取出來(lái)。

剩余內(nèi)容整理中。。。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容