InputStream:繼承自InputStream的流都是用於向程序中輸入數據的,且數據單位都是字節(8位)。java
OutputSteam:繼承自OutputStream的流都是程序用於向外輸出數據的,且數據單位都是字節(8位)。緩存
Reader:繼承自Reader的流都是用於向程序中輸入數據的,且數據單位都是字符(16位)。spa
Writer:繼承自Writer的流都是程序用於向外輸出數據的,且數據單位都是字符(16位)。code
package IOStream; 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; import java.io.InputStream; import java.io.OutputStream; public class BufferedStreamDemo { /** * 利用緩衝字節流來實現視頻、音頻、圖片的複製粘貼 */ private static final String FilePath1 = "D:/圖片文件包/夫人.jpg";// 要複製的文件路徑 private static final String FilePath2 = "E:/夫人.jpg"; // 文件目標路徑 /** * 1.使用緩存流拷貝文件 * 2.記錄拷貝過程用時 */ public static long CopyFileByBufferedStream(){ File file1 = new File(FilePath1); // 建立要複製的文件對象 if(!file1.exists()){ // 判斷文件路徑是否存在 System.out.println("文件不存在!"); return 0; } long starTime = System.currentTimeMillis(); // 記錄複製文件所需時間 InputStream inStream = null; // 建立字節輸入流 BufferedInputStream bInStream = null; // 建立緩衝輸入字節流 OutputStream outStream = null; // 建立字節輸出流 BufferedOutputStream bOutStream = null; // 建立緩衝字節輸出流 try { inStream = new FileInputStream(FilePath1); // 建立文件輸入流,指向路徑能夠是:FilePath1,也能夠是file1 bInStream = new BufferedInputStream(inStream); // 用緩衝輸入流裝飾文件輸入流 outStream = new FileOutputStream(FilePath2); // 建立文件輸出流,指向目標路徑 bOutStream = new BufferedOutputStream(outStream); // 用緩衝輸出流來包裝文件輸出流 int i = 0; while((i = bInStream.read()) != -1){ bOutStream.write(i); // 對接流,輸出文件 } System.out.println("文件拷貝完成!"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ try { bOutStream.close(); bInStream.close(); } catch (IOException e) { e.printStackTrace(); } } long endTime = System.currentTimeMillis(); return endTime - starTime; } public static void main(String[] args) { long time = CopyFileByBufferedStream(); System.out.println("拷貝用時:" + time + "ms"); } }