JAVA的IO流之緩衝流
阿新 • • 發佈:2018-12-19
JAVA緩衝流本身不具IO功能,只是在別的流上加上緩衝提高效率,像是為別的流裝上一種包裝。當對檔案或其他目標頻繁讀寫或操作效率低,效能差。這時使用緩衝流能夠更高效的讀寫資訊。因為緩衝流先將資料快取起來,然後一起寫入或讀取出來。所以說,緩衝流還是很重要的,在IO操作時記得加上緩衝流提升效能。
緩衝流分為位元組和字元緩衝流
位元組緩衝流為: BufferedInputStream—位元組輸入緩衝流 BufferedOutputStream—位元組輸出緩衝流 字元緩衝流為: BufferedReader—字元輸入緩衝流 BufferedWriter—字元輸出緩衝流 下面主要介紹這四種緩衝流的使用。
一.位元組緩衝流
1.BufferedOutputStream—位元組輸出緩衝流 BufferedOutputStream類實現緩衝的輸出了,通過設定這種輸出流,應用程式就可以將各個位元組寫入底層輸出流中,而不必每一個位元組寫入都呼叫底層系統。 示例程式碼:
public static void main(String[] args) { try { //建立位元組輸出流例項 OutputStream out=new FileOutputStream("L:\\test.txt"); //根據位元組輸出流構建位元組緩衝流 BufferedOutputStream buf=new BufferedOutputStream(out); String data="好好學習,天天向上"; buf.write(data.getBytes());//寫入緩衝區 buf.flush();//重新整理緩衝區,即把內容寫入 //關閉流 buf.close();//關閉緩衝流時,也會重新整理一次緩衝區 out.close(); } catch (IOException e) { e.printStackTrace(); } }
2.BufferedInputStream—位元組輸入緩衝流 BufferedInputStream為別的輸入流新增緩衝功能,在建立BufferedInputStream時會建立一個內部緩衝陣列,用於緩衝資料,提高效能。
示例程式碼:
public static void main(String[] args) { try { //建立位元組輸入流例項 InputStream in=new FileInputStream("L:\\test.txt"); //根據位元組輸入流構建位元組緩衝流 BufferedInputStream buf=new BufferedInputStream(in); byte[]bytes=new byte[1024]; //資料讀取 int len=-1; StringBuffer sb=new StringBuffer(); while((len=buf.read(bytes))!=-1) { sb.append(new String(bytes,0,len)); } System.out.println("內容為:"+sb); //關閉流 buf.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } }
二.字元緩衝流
1.BufferedWriter—字元輸出緩衝流 將文字寫入字元輸出流,緩衝各個字元,從而提供高效的寫入。可以指定緩衝區的大小,一般情況下,預設的緩衝區大小就足夠了。
示例程式碼:
public static void main(String[] args) {
try {
Writer w=new FileWriter("L:\\test.txt");
//根據字元輸出流建立字元緩衝流
BufferedWriter buf=new BufferedWriter(w);
//寫入資料
buf.write("只要功夫深鐵杵磨成針");
//重新整理流
buf.flush();
//關閉流
buf.close();
w.close();
} catch (IOException e) {
e.printStackTrace();
}
}
2.BufferedReader—字元輸入緩衝流 從字元輸入流中讀取資訊,緩衝各個字元,從而實現高效讀取。可以指定緩衝區的大小,一般情況下,預設的緩衝區大小就足夠了。預設大小為8192.
示例程式碼:
public static void main(String[] args) {
try {
Reader r=new FileReader("L:\\test.txt");
//根據字元輸入流建立字元緩衝流
BufferedReader buf=new BufferedReader(r);
char [] data=new char[512];
//資料讀取
int len=-1;
StringBuilder sb=new StringBuilder();
while((len=buf.read(data))!=-1)
{
sb.append(new String(data,0,len));
}
System.out.println("內容是: "+sb);
//關閉流
buf.close();
r.close();
} catch (IOException e) {
e.printStackTrace();
}
}