1. 程式人生 > >快取位元組流BufferedInputStream和BufferedOputStream

快取位元組流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();

    }
}