I / O之帶緩衝的輸入輸出流及數據輸入輸出流

一、帶緩衝的輸入輸出流

緩衝是I/O的一種性能優化。緩衝流爲I/O流增加了內存緩衝區。

1. BufferedInputStream 類與 BufferedOutputStream 類

 BufferedInputStream 類可以對所有 InputStream 類進行帶緩衝的包裝已達到性能優化。

 BufferedOutputStream 類輸出信息和用 OutputStream 輸出信息完全一樣,只不過 BufferedOutputStream 用一個flush()方法將緩   衝區的數據強制輸出完。

代碼示例:

package com.aiit.book.file;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedStreamTest {

	public static void main(String[] args) throws FileNotFoundException  {
		// TODO Auto-generated method stub
		String content [] = {"牀前明月光","疑是地上霜","舉頭望明月","低頭思故鄉"};
		File file = new File("E:\\\\word.txt");//創建文件內容
		FileOutputStream fos = null;//創建FileOutputStream對象
		BufferedOutputStream bos = null;
		FileInputStream fis = null;
		BufferedInputStream bis = null;
		try {
			fos = new FileOutputStream(file,true);//實例化FileOutputStream對象
			bos =new  BufferedOutputStream(fos);
			byte [] bContent = new byte[1024];//創建一個數組緩衝區
			for(int k = 0;k < content.length;k++) {
				bContent = content[k].getBytes();//將數組數據轉化爲字節數組
				bos.write(bContent);//將字節寫入文件
			}
			System.out.println("寫入成功");
			bos.close();
			fos.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 

		try {
			fis = new FileInputStream(file);
			bis = new BufferedInputStream(fis);
			byte[] bContent = new byte[1024];

			int len = bis.read(bContent);
			System.out.println("從文件中讀取內容:"+new String(bContent,0,len));
			bis.close();
			fis.close();
		}
		catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


	}



}

運行結果:

2. BufferedReader 類與 BufferedWriter 類

  BufferedReader 類與 BufferedWriter 類分別繼承 Reader 類與 Writer 類,這兩個類同樣具有內部緩衝機制,並可以以行爲單位    進行輸入輸出。

  說明:在 BufferedWriter 類的Writer()方法時,數據並沒有立刻被寫入至輸出流,而是首先進入緩衝區中。如果想立刻將緩衝區    的數據寫入輸出流,一定要調用flush()方法。

package com.aiit.book.file;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedReaderAndWriter {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String content[] = {"一去二三裏","煙村四五家","亭臺六七座","八九十之花"};
		File file = new File("E:\\word.txt");
		try {
			FileWriter fw = new FileWriter(file,true);
			BufferedWriter bufw = new BufferedWriter(fw);
			for(int k = 0;k<content.length;k++) {
				bufw.write(content[k]);//將字符串數組中元素寫入磁盤文件中
				bufw.newLine();//將數組中的單個元素以單行的形式寫入文件
			}
			bufw.close();//將BufferedWriter流關閉
			fw.close();//將FileWriter流關閉
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			FileReader fr = new FileReader(file);
			BufferedReader bufr = new BufferedReader(fr);
			String s = null;//創建字符串對象
			int i = 0;			
			//如果文件的文本行數不爲空,則進入循環
			while((s = bufr.readLine())!=null) {
				i++;
				System.out.println("第"+ i +"行:"+s);
			}
			bufr.close();
			fr.close();
		}
		catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	} 
}

二、數據輸入輸出流

數據輸入輸出流(DataInputStream 類與 DataOutputStream 類)允許應用程序從輸入流中讀取Java基本數據類型的數據,也就是說,當讀取一個數據時,不必在關心這個數據應該是哪種類型。

package com.aiit.book.file;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 
 * @author Administrator
 *同過DataOutputStream類的寫入方法向指定磁盤文件中寫入不用類型的數據,然後通過
 *DataInputStream類的相應讀取方法將寫入的不用類型數據輸入到控制檯上
 */
public class Example_Data {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			File file = new File("E:\\word.txt");
			FileOutputStream fs = new FileOutputStream(file,true);
			DataOutputStream ds = new DataOutputStream(fs);
			try {
				ds.writeUTF("使用writeUTF()寫入數據");//將字符串寫入文件
				ds.writeDouble(19.8);			   //將double數據寫入文件
				ds.writeInt(298);				   //將int類型寫入文件
				ds.writeBoolean(true);             //將boolean類型寫入文件
				ds.close(); 					   //關閉寫入流
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			FileInputStream fi = new FileInputStream(file);
			DataInputStream dis = new DataInputStream(fi);
			try {
				System.out.println("readUTF()方法讀取數據:"+dis.readUTF());
				System.out.println("readDouble()方法讀取數據:"+dis.readDouble());
				System.out.println("readInt()方法讀取數據:"+dis.readInt());
				System.out.println("readBoolean()方法讀取數據:"+dis.readBoolean());
				dis.close();
				fs.close();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}


		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章