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(); } }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持小牛知识库!
本文向大家介绍Java字节缓冲流原理与用法详解,包括了Java字节缓冲流原理与用法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java字节缓冲流原理与用法。分享给大家供大家参考,具体如下: 一 介绍 BufferInputStresm和BufferOutputStream 这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性
我正在阅读有关流的信息,发现我们可以使用setvbuf()函数来控制流......它写的是在行缓冲模式中,当遇到换行符时流将数据发送到文件中,在无缓冲状态下没有缓冲......所以我写了以下代码...... 所以我认为,因为这些是无缓冲流,所以输入应该在我写入屏幕后立即发送到标准输出。。。但程序在写入每一行后等待我按enter键,然后屏幕上只显示输出(由于fwrite)。。。我的问题是,当这些是无
正在为以下内容编写javadoc: 但是,将缓冲的输入流传入真的是一个问题吗?因此: 是否将is缓冲到bis中,或者java是否检测到is已缓冲并设置bis=is?如果是,不同的缓冲区大小是否会有所不同?如果没有,为什么不呢<注意:我说的是输入流,但实际上这个问题也适用于输出流
今天早些时候很无聊,我开始思考Java中缓冲和非缓冲字节流的相对性能。作为一个简单的测试,我下载了一个相当大的文本文件,并编写了一个简短的程序来确定缓冲流在复制文件时的效果。进行了四项测试: 使用无缓冲的输入和输出字节流复制文件 毫不奇怪,使用缓冲输入和输出流比使用无缓冲流快几个数量级。然而,真正有趣的事情(至少对我来说)是案例2和案例3之间的速度差异。部分样本结果如下: 对于那些感兴趣的人,可以
本文向大家介绍详细了解JAVA NIO之Buffer(缓冲区),包括了详细了解JAVA NIO之Buffer(缓冲区)的使用技巧和注意事项,需要的朋友参考一下 当我们需要与 NIO Channel 进行交互时, 我们就需要使用到 NIO Buffer, 即数据从 Buffer读取到 Channel 中, 并且从 Channel 中写入到 Buffer 中。缓冲区本质上是一块可以写入数据,然后可以从
本文向大家介绍BufferedInputStream(缓冲输入流)详解_动力节点Java学院整理,包括了BufferedInputStream(缓冲输入流)详解_动力节点Java学院整理的使用技巧和注意事项,需要的朋友参考一下 BufferedInputStream 介绍 BufferedInputStream 是缓冲输入流。它继承于FilterInputStream。 BufferedInput