服务器之家

服务器之家 > 正文

详解java IO流之缓冲流的使用

时间:2020-07-26 14:14     来源/作者:滥好人

java缓冲流本身不具IO功能,只是在别的流上加上缓冲提高效率,像是为别的流装上一种包装。当对文件或其他目标频繁读写或操作效率低,效能差。这时使用缓冲流能够更高效的读写信息。因为缓冲流先将数据缓存起来,然后一起写入或读取出来。所以说,缓冲流还是很重要的,在IO操作时记得加上缓冲流提升性能。

缓冲流分为字节和字符缓冲流

字节缓冲流为:

BufferedInputStream—字节输入缓冲流

BufferedOutputStream—字节输出缓冲流

字符缓冲流为:

BufferedReader—字符输入缓冲流

BufferedWriter—字符输出缓冲流

下面主要介绍这四种缓冲流的使用。

 一.  字节缓冲流

1.BufferedOutputStream—字节输出缓冲流

BufferedOutputStream类实现缓冲的输出了,通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必每一个字节写入都调用底层系统。

示例代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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时会创建一个内部缓冲数组,用于缓冲数据,提高性能。

示例代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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—字符输出缓冲流

将文本写入字符输出流,缓冲各个字符,从而提供高效的写入。可以指定缓冲区的大小,一般情况下,默认的缓冲区大小就足够了。

示例代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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.

示例代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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();
 }
 }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持服务器之家!

原文链接:http://www.cnblogs.com/hq233/p/6266928.html

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
返回顶部