Java_字節緩衝流紀要

package cn.bufferStream;

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

/**
 * 今天整理以下關於緩衝流的Demo;
 * [BufferInputStream,BufferOutputStream]
 * 
 * 
 * 緩衝流是對基礎流的優化;
 * 同樣按照字符流和字節流做了相應的分類;
 * 字節流(InputStream,OutputStream) :FileInputStream,FileOutputStream;
 * 字符流(Reader,Writer) :FileReader,FileWriter;
 * 
 * 對應的緩衝流:
 * 字節流 : BufferInputStream,BufferOutputStream;
 * 字符流 : BufferReader,BufferWriter;
 * 
 * 在這裏呢,簡單說明一下緩衝流的優點:緩衝流能夠大大提高對流數據的操作效率;
 * 
 * 下面開始對應的Demo;
 * 還是和以往一樣,創建一個自己的測試類;
 * @author Administrator
 *
 */
public class BufferStreamTest {

	/**
	 * 封裝字節文件流的數據流操作;
	 * @throws IOException
	 */
	public static void fileInOrOutStream(byte [] bytArr, FileInputStream fis, FileOutputStream fos) throws IOException {

		// 記錄初始進入的時間節點;
		long startTime = System.currentTimeMillis();
		
		/**
		 *  while循環讀取流數據;
		 *  FileInputStream.read();方法每次會讀取流對象中的一個字符數據;
		 *  注意,沒吊用一次FileInputStream.read()就會讀取一位,所以不要再循環中主動獲取;
		 */
		while(fis.read(bytArr) != -1) {
			
			// 調用文件輸出流對象將字符數據輸出到指定文件;
			fos.write(bytArr, 0, bytArr.length);
		}
		
		/**
		 *  最後我們需要關閉資源;
		 *  還是老規則:先開後關閉;
		 */
		fos.close();
		fis.close();
		
		// 記錄結束的時間節點;
		long endTime = System.currentTimeMillis();
		
		// 輸出完結所需要時間消耗:(毫秒級別)
		System.out.println("完結所需要時間消耗: "+(endTime-startTime)+"毫秒!");
		
	}
	
	/**
	 * 封裝字節文件緩衝流進行的流數據處理;
	 * @param bytArr 封裝的字節數組;
	 * @param bis 指定實例化的字節文件緩衝輸入流;
	 * @param bos 指定實例化的字節文件緩衝輸出流
	 * @throws IOException
	 */
	public static void fileBufferStream(byte [] bytArr, BufferedInputStream bis, BufferedOutputStream bos) throws IOException {

		// 記錄初始進入的時間節點;
		long startTime = System.currentTimeMillis();
		
		// 獲取緩衝流數據;
		while(bis.read(bytArr) != -1) {
			// 寫入緩衝流數據;
			bos.write(bytArr, 0, bytArr.length);
		}
		
		// 資源釋放;
		bis.close();
		bos.close();
		
		// 記錄結束的時間節點;
		long endTime = System.currentTimeMillis();
		
		// 輸出完結所需要時間消耗:(毫秒級別)
		System.out.println("完結所需要時間消耗: "+(endTime-startTime)+"毫秒!");
	}
	
	/**
	 * Java主函數|入口;
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) {
		
		// 初始化文件地址;
		String fisPath = "D:\\vstar.txt";
		
		// 初始化操作文件路徑地址;
		String fosPath = "D:\\vstar_backup2.txt";
		
		// 初始化自己的字節數組,用來數據緩存;
		byte [] bytArr = new byte[8*1024];
		
		// 對象初始! 
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			
			// 初始化文件輸入流對象;利用指定操作路徑的構造方式獲取;
			fis = new FileInputStream(fisPath);
			
			// 初始化文件輸出流對象;利用指定操作路徑的構造方式獲取;
			fos = new FileOutputStream(fosPath,false);
			
			// 調用直接方式進行流數據的操作;
//			fileInOrOutStream(bytArr, fis, fos); // 479
			
			// 調用使用緩衝流操作流數據的方式進行處理;
			fileBufferStream(bytArr, new BufferedInputStream(fis), new BufferedOutputStream(fos)); // 179毫秒!
			
			// 資源釋放;
			fis.close();
			fos.close();
			
		} catch (IOException e) {
			e.printStackTrace();
		} 
		
	}
}

 

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