private static void fileStream() {
// 普通字节复制:耗时7343
try {
FileInputStream fis = new FileInputStream("D:\\我的电脑\\asd\\aa\\a.jpg");
int len = 0;
FileOutputStream fos = new FileOutputStream("D:\\我的电脑\\asd\\aa\\b.jpg");
long k = System.currentTimeMillis();
while ((len = fis.read()) != -1) {
fos.write(len);
}
fos.close();
fis.close();
long j = System.currentTimeMillis();
System.out.println("单个字节复制耗时" + (j - k));
} catch (IOException e) {
e.printStackTrace();
}
}
private static void bufferedStream() {
try {
//缓存字节复制:耗时79
long k = System.currentTimeMillis();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\我的电脑\\asd\\aa\\a.jpg"));
int len = 0;
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\我的电脑\\asd\\aa\\b.jpg"));
while ((len = bis.read()) != -1) {
bos.write(len);
}
bos.close();
bis.close();
long j = System.currentTimeMillis();
System.out.println("缓存单个字节复制耗时" + (j - k));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
很显然,缓存复制时速度快了很多,它的底层给了一个 1024*8的数组,所以速度快很多
我们来看看字符复制是不是更快:
private static void bufferedReader() {
long k = System.currentTimeMillis();
try {
BufferedReader br = new BufferedReader(new FileReader("D:\\我的电脑\\asd\\aa\\a.jpg"));
BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\我的电脑\\asd\\aa\\b.jpg"));
int len = 0;
while ((len = br.read()) != -1) {
bw.write(len);
}
bw.close();
br.close();
long j = System.currentTimeMillis();
System.out.println("耗时" + (j - k));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static void fileReader() {
//普通字符复制耗时506
long k = System.currentTimeMillis();
try {
FileReader fr = new FileReader("D:\\我的电脑\\asd\\aa\\a.jpg");
FileWriter fw = new FileWriter("D:\\我的电脑\\asd\\aa\\b.jpg");
int len = 0;
while ((len = fr.read()) != -1) {
fw.write(len);
}
fw.close();
fr.close();
long j = System.currentTimeMillis();
System.out.println("耗时" + (j - k));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
为什么字符复制反倒没有字节复制快呢?
而且当我们点开复制文件b.jpg的时候会发现,
该文件已经损坏,无法打开!
这里就要注意,字符写入一下写入一个字符,只适合拿来复制文字,复制图片、视频等就会非常容易出错!!!