詳解java IO流之緩沖流的使用
java緩沖流本身不具IO功能,只是在別的流上加上緩沖提高效率,像是為別的流裝上一種包裝。當(dāng)對文件或其他目標(biāo)頻繁讀寫或操作效率低,效能差。這時(shí)使用緩沖流能夠更高效的讀寫信息。因?yàn)榫彌_流先將數(shù)據(jù)緩存起來,然后一起寫入或讀取出來。所以說,緩沖流還是很重要的,在IO操作時(shí)記得加上緩沖流提升性能。
緩沖流分為字節(jié)和字符緩沖流
字節(jié)緩沖流為:
BufferedInputStream—字節(jié)輸入緩沖流
BufferedOutputStream—字節(jié)輸出緩沖流
字符緩沖流為:
BufferedReader—字符輸入緩沖流
BufferedWriter—字符輸出緩沖流
下面主要介紹這四種緩沖流的使用。
一. 字節(jié)緩沖流
1.BufferedOutputStream—字節(jié)輸出緩沖流
BufferedOutputStream類實(shí)現(xiàn)緩沖的輸出了,通過設(shè)置這種輸出流,應(yīng)用程序就可以將各個(gè)字節(jié)寫入底層輸出流中,而不必每一個(gè)字節(jié)寫入都調(diào)用底層系統(tǒng)。
示例代碼:
public static void main(String[] args) { try { //創(chuàng)建字節(jié)輸出流實(shí)例 OutputStream out=new FileOutputStream("L:\\test.txt"); //根據(jù)字節(jié)輸出流構(gòu)建字節(jié)緩沖流 BufferedOutputStream buf=new BufferedOutputStream(out); String data="好好學(xué)習(xí),天天向上"; buf.write(data.getBytes());//寫入緩沖區(qū) buf.flush();//刷新緩沖區(qū),即把內(nèi)容寫入 //關(guān)閉流 buf.close();//關(guān)閉緩沖流時(shí),也會(huì)刷新一次緩沖區(qū) out.close(); } catch (IOException e) { e.printStackTrace(); } }
2.BufferedInputStream—字節(jié)輸入緩沖流
BufferedInputStream為別的輸入流添加緩沖功能,在創(chuàng)建BufferedInputStream時(shí)會(huì)創(chuàng)建一個(gè)內(nèi)部緩沖數(shù)組,用于緩沖數(shù)據(jù),提高性能。
示例代碼:
public static void main(String[] args) { try { //創(chuàng)建字節(jié)輸入流實(shí)例 InputStream in=new FileInputStream("L:\\test.txt"); //根據(jù)字節(jié)輸入流構(gòu)建字節(jié)緩沖流 BufferedInputStream buf=new BufferedInputStream(in); byte[]bytes=new byte[1024]; //數(shù)據(jù)讀取 int len=-1; StringBuffer sb=new StringBuffer(); while((len=buf.read(bytes))!=-1) { sb.append(new String(bytes,0,len)); } System.out.println("內(nèi)容為:"+sb); //關(guān)閉流 buf.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } }
二. 字符緩沖流
1.BufferedWriter—字符輸出緩沖流
將文本寫入字符輸出流,緩沖各個(gè)字符,從而提供高效的寫入??梢灾付ň彌_區(qū)的大小,一般情況下,默認(rèn)的緩沖區(qū)大小就足夠了。
示例代碼:
public static void main(String[] args) { try { Writer w=new FileWriter("L:\\test.txt"); //根據(jù)字符輸出流創(chuàng)建字符緩沖流 BufferedWriter buf=new BufferedWriter(w); //寫入數(shù)據(jù) buf.write("只要功夫深鐵杵磨成針"); //刷新流 buf.flush(); //關(guān)閉流 buf.close(); w.close(); } catch (IOException e) { e.printStackTrace(); } }
2.BufferedReader—字符輸入緩沖流
從字符輸入流中讀取信息,緩沖各個(gè)字符,從而實(shí)現(xiàn)高效讀取??梢灾付ň彌_區(qū)的大小,一般情況下,默認(rèn)的緩沖區(qū)大小就足夠了。默認(rèn)大小為8192.
示例代碼:
public static void main(String[] args) { try { Reader r=new FileReader("L:\\test.txt"); //根據(jù)字符輸入流創(chuàng)建字符緩沖流 BufferedReader buf=new BufferedReader(r); char [] data=new char[512]; //數(shù)據(jù)讀取 int len=-1; StringBuilder sb=new StringBuilder(); while((len=buf.read(data))!=-1) { sb.append(new String(data,0,len)); } System.out.println("內(nèi)容是: "+sb); //關(guān)閉流 buf.close(); r.close(); } catch (IOException e) { e.printStackTrace(); } }
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
javaweb實(shí)現(xiàn)百度GPS定位接口(經(jīng)緯度)
這篇文章主要介紹了javaweb實(shí)現(xiàn)百度GPS定位接口(經(jīng)緯度),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02詳解分別用Kotlin和java寫RecyclerView的示例
本篇文章主要介紹了詳解分別用Kotlin和java寫RecyclerView的示例,詳解分別用Kotlin和java寫RecyclerView的示例2017-12-12JAVA使用ElasticSearch查詢in和not in的實(shí)現(xiàn)方式
今天小編就為大家分享一篇關(guān)于JAVA使用Elasticsearch查詢in和not in的實(shí)現(xiàn)方式,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12java:try...catch跳過異常繼續(xù)處理循環(huán)問題
這篇文章主要介紹了java:try...catch跳過異常繼續(xù)處理循環(huán)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10webuploader 實(shí)現(xiàn)圖片批量上傳功能附實(shí)例代碼
這篇文章主要介紹了webuploader 實(shí)現(xiàn)圖片批量上傳功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11