InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。
OutputSteam:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。
Reader:继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。
Writer:继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。
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"); } }