版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fighting123678/article/details/84259403
1、四种抽象类之上加Buffered就是缓冲流,给数据读写提供了缓冲能力,通过缓冲流,读取的效率会更高,套接在其余的节点流或者缓冲流之上。
1、以字节为单位进行读写
实例1:TestBufferStream1
—功能:使用BufferedInputStream从文件HelloWorld.java中读取字节。
import java.io.*;
/*
* 功能:使用BufferedInputStream从文件HelloWorld.java中读取字节。
* 问题:仍然不能显示中文,因为是以字节流的形式读取数据。
* */
public class TestBufferStream1
{
public static void main(String[] args)
{
BufferedInputStream bis=null;
try
{
/*FileInputStream fis=new FileInputStream("HelloWorld.java");
bis=new BufferedInputStream(fis);*/
bis=new BufferedInputStream(new FileInputStream("HelloWorld.java"));
int c=0;
for(int i=0;(c=bis.read())!=-1;i++)
{
System.out.print((char)c);
}
}
catch(FileNotFoundException e)
{
System.out.println("文件读取错误");
System.exit(-1);
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
try
{
bis.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
结果是
虽然是提供了缓冲功能,但是还是以字节为单位读,而且每次都读一个字节过来,所以如果是中文的话,会出现问题。
2、以字符为单位进行读写
实例2:TestBufferReader
import java.io.*;
/*功能:往test.txt中写入100行字符,然后从test.txt读出写入的数据,并打印到控制台*/
public class TestBufferReader
{
public static void main(String[] args)
{
BufferedReader br=null;
try
{
BufferedWriter bw=new BufferedWriter(new FileWriter("test.txt"));//向test.txt中写内容
br=new BufferedReader(new FileReader("test.txt"));//读test.txt中的内容
String s=null;
for(int i=0;i<=100;i++)
{
s=String.valueOf(i);//把int类型的东西换成字符串类型的东西
bw.write(s);//写字符串
bw.newLine();//新的一行,和回车一样
}
bw.flush();//将缓冲中的内容清空并且写入到文件
while((s=br.readLine())!=null)
/*
* readLine():常用方法,一次可以读一行
* 一共写了100行字符串
* 每次读一行回来
* 读到结尾就是null了,读到结尾之后就打印出来
**/
{
System.out.println(s);
}
}
catch(FileNotFoundException e)
{
System.out.println("文件读取错误");
System.exit(-1);
}
catch(IOException e)
{
e.printStackTrace();
}
/*catch(FileNotFoundException e)
{
System.out.println("文件读取错误");
System.exit(-1);
}*/
finally
{
try
{
br.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
- 先通过BufferedWriter写100行字符串
- 然后,通过BufferReader读100行字符串
- 将其显示到屏幕上
原本没有test文件,但是,当运行结束之后自己生成了这个文档,而且内容是
- 在这个测试中,用到了两个类BufferedWriter和BufferedReader,这两个类都是以字符为单位进行读写,而且带缓冲,效率比较高
- 同时,在BufferedReader类中有readLine()方法,非常好用
- 如果catch(FileNotFoundException e)在注释的地方是错误的,因为这两个异常类是父类与子类的关系,父类异常不能写在子类异常前面