1. 程式人生 > >緩衝流(處理流/過濾流)

緩衝流(處理流/過濾流)

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)在註釋的地方是錯誤的,因為這兩個異常類是父類與子類的關係,父類異常不能寫在子類異常前面