字节流相当于字符流来说,有更广泛的读写范围。也就是说:字符流管得了的事我字节流管,字符流不敢管的事我字节流也管。
我们来用字节流复制视频,这个MP4文件大概8MB。
我们通过
方式1:基本字节流一次读写一个字节(method1)
方式2:基本字节流一次读写一个数组(method2)
方式3:字节缓冲流一次读取一个字节(method3)
方式4:字节缓冲流一次读取一个字节数组(method4)
四种方式来复制MP4文件到指定目录,比较效率。
L:\Java\ByteStream\copy.MP4 ——> L:\Java\video\copy.MP4
package bufferedstream;
/*复制视频记录所用时间:
* 方式1:基本字节流一次读写一个字节
* 方式2:基本字节流一次读写一个字节数组
* 方式3:字节缓冲流一次读取一个字节
* 方式4:字节缓冲流一次读取一个字节数组*/
import java.io.*;
public class CopyAviDemo {
public static void main(String[] args) throws IOException {
//记录开始时间
long startTime = System.currentTimeMillis();
//复制视频
//method1();
//method2();
//method3();
//method4();
//记录结束时间
long endTime = System.currentTimeMillis();
System.out.println("耗时:" + (endTime - startTime) + "ms");
}
// 方式1:基本字节流一次读写一个字节
public static void method1() throws IOException {
//文件所在目录:L:\Java\ByteStream\copy.MP4
FileInputStream fis = new FileInputStream("L:\\Java\\ByteStream\\copy.MP4");
//文件将复制的目标目录:L:\Java\video\copy.MP4
FileOutputStream fos = new FileOutputStream("L:\\Java\\video\\copy.MP4");
int by;
while ((by = fis.read()) != -1) {
fos.write(by);
}
fis.close();
fos.close();
}
// 方式2:基本字节流一次读写一个字节数组
public static void method2() throws IOException {
//文件所在目录:L:\Java\ByteStream\copy.MP4
FileInputStream fis = new FileInputStream("L:\\Java\\ByteStream\\copy.MP4");
//文件将复制的目标目录:L:\Java\video\copy.MP4
FileOutputStream fos = new FileOutputStream("L:\\Java\\video\\copy.MP4");
byte[] bys = new byte[1024];
int len;
while ((len = fis.read(bys)) != -1) {
fos.write(bys, 0, len);
}
fis.close();
fos.close();
}
//方式3:字节缓冲流一次读取一个字节
public static void method3() throws IOException {
//文件所在目录:L:\Java\ByteStream\copy.MP4
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("L:\\Java\\ByteStream\\copy.MP4"));
//文件将复制的目标目录:L:\Java\video\copy.MP4
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("L:\\Java\\video\\copy.MP4"));
int by;
while ((by = bis.read()) != -1) {
bos.write(by);
}
bis.close();
bos.close();
}
//方式4:字节缓冲流一次读取一个字节数组
public static void method4() throws IOException {
//文件所在目录:L:\Java\ByteStream\copy.MP4
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("L:\\Java\\ByteStream\\copy.MP4"));
//文件将复制的目标目录:L:\Java\video\copy.MP4
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("L:\\Java\\video\\copy.MP4"));
byte[] bys = new byte[1024];
int len;
while ((len = bis.read(bys)) != -1) {
bos.write(bys,0,len);
}
bis.close();
bos.close();
}
}
方式1复制时间:
方式2复制时间:
方式3复制时间:
方式4复制时间:
缓冲流一次读取一个字节数组的方式简直是快枪手,复制8MB的文件的速度比打王者的延时都低,在大文件的处理中,各位应该知道用哪个了吧…