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();
}
}
}