InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。
OutputSteam:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。
Reader:继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。
Writer:继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。
package com.scoket.io.BufferedStream;
import java.io.*;
/**
* @author riemann
* @date 2019/04/23 23:19
*/
public class BufferedStreamDemo {
/**
* 利用缓冲字节流来实现视频、音频、图片的复制粘贴
*/
private static final String filePathSource = "E:/Test/TestBufferedStream/cxy.png";// 要复制的文件路径
private static final String filePathTarget = "E:/Test/TestBufferedStream/cxyCopy.png";// 文件目标路径
/**
* 1.使用缓存流拷贝文件
* 2.记录拷贝过程用时
*/
public static long CopyFileByBufferedStream() {
File fileSource = new File(filePathSource);// 创建要复制的文件对象
if (!fileSource.exists()) {// 判断文件路径是否存在
System.out.println("该文件不存在");
return 0;
}
long startTime = System.currentTimeMillis();// 记录复制文件所需时间
InputStream is = null; // 创建字节输入流
OutputStream os = null; // 创建字节输出流
BufferedInputStream bis = null;// 创建缓冲输入字节流
BufferedOutputStream bos = null;// 创建缓冲字节输出流
try {
is = new FileInputStream(filePathSource);// 创建文件输入流,指向路径可以是:filePathSource,也可以是fileSource
bis = new BufferedInputStream(is);// 用缓冲输入流装饰文件输入流
os = new FileOutputStream(filePathTarget);// 创建文件输出流,指向目标路径
bos = new BufferedOutputStream(os);// 用缓冲输出流来包装文件输出流
int size = 0;
while ((size = bis.read()) != -1) {
bos.write(size);// 对接流,输出文件
}
System.out.println("文件拷贝完成!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bos.close();
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
long endTime = System.currentTimeMillis();
return endTime - startTime;
}
public static void main(String[] args) {
long time = CopyFileByBufferedStream();
System.out.println("拷贝用时:" + time + "ms");
}
}