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