快取位元組流BufferedInputStream和BufferedOputStream
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 功能:使用檔案位元組流實現檔案的複製
*
*
* @author Administrator
*
*/
public class TestCopy1 {
public static void main(String[] args) throws IOException {
//1.建立一個輸入流和輸出流
File file1 = new File("e:/JDK_API_1_6_zh_CN.CHM");
InputStream fis = new FileInputStream(file1);
BufferedInputStream bis = new BufferedInputStream(fis);//預設的輸入緩衝區大小8192位元組
File file2 = new File("e:/JDK_API_1_6_zh_CN2.CHM");
OutputStream fos = new FileOutputStream(file2);
BufferedOutputStream bos = new BufferedOutputStream(fos); //預設輸出緩衝區大小8192位元組
//2.使用輸入流和輸出流完成複製
//2.1準備一箇中轉站:水杯
int n; //
//2.2藉助迴圈和中轉站完成複製操作
n = bis.read(); //從檔案中讀取一個位元組 byte
while(n != -1){
//寫一個位元組到目的檔案(將水杯的水放入水缸)
bos.write(n);
//再讀一個位元組(再接一杯水)
n = bis.read();
}
//3.關閉輸入流和輸出流
bis.close();
fis.close();
bos.close();
fos.close();
}
}
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 功能:使用檔案位元組流實現檔案的複製
*
* 總結1:節點流和處理流
* 節點流 FileInputStream FileOutputStream 直接和資料來源和目的地相連線,不可缺少
* 處理流 BufferedInputStream BufferedOutputStream 不直接和資料來源和目的地相連線
* 可以帶來其他的好處:提高效能 簡化操作
* 節點流:FileReader FileWriter
* 處理流:BufferedReader BufferedWriter
*
* 總結2:關閉流的時候直接關閉高層流即可,不需要關閉底層流
*
* 總結3:如何重新整理輸出緩衝區
* 1.bos.close() 關閉流的時候會同時重新整理輸出緩衝區
2.直接重新整理 flush()
3.輸出緩衝區滿後,自動重新整理
* 總結4:簡化建立流的過程
* BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("e:/readme.txt")));
*BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("e:/readme2.txt"));
* @author Administrator
*
*/
public class TestCopy2 {
public static void main(String[] args) throws IOException {
//1.建立一個輸入流和輸出流
// File file1 = new File("e:/readme.txt");
// InputStream fis = new FileInputStream(file1);
// BufferedInputStream bis = new BufferedInputStream(fis);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("e:/readme.txt")));
// File file2 = new File("e:/readme2.txt");
// OutputStream fos = new FileOutputStream(file2);
// BufferedOutputStream bos = new BufferedOutputStream(fos);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("e:/readme2.txt"));
//2.使用輸入流和輸出流完成複製
//2.1準備一箇中轉站:水桶
byte [] buf = new byte[1024];
//2.2藉助迴圈和中轉站完成複製操作
int len = bis.read(buf); //讀取檔案的內容到buf陣列,返回的真正讀取的位元組數。檔案結束,返回-1
while(len !=-1){
//寫陣列的內容到目的檔案
//fos.write(buf);//寫1024
bos.write(buf, 0, len);
//再讀一次
len = bis.read(buf);
}
//3.關閉輸入流和輸出流
bis.close();
// //fis.close();
bos.close();
//fos.close();
//bos.flush();
}
}