缓冲流(处理流/过滤流)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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)在注释的地方是错误的,因为这两个异常类是父类与子类的关系,父类异常不能写在子类异常前面

猜你喜欢

转载自blog.csdn.net/fighting123678/article/details/84259403