开发工具与关键技术:IDEA Java
撰写时间:2021/7/19
最近在学java,学到了IO流 ,学了字节流和字节缓冲流的用法。
使用字节缓冲流复制大型文件是要比用字节流复制文件快上不少,现在我来展示一下,复制一个200多m的视频文件用字节流的逐个添加字节法和逐个添加字节数组方和字节缓冲流的逐个添加字节法和逐个添加字节数组法的消耗的时间。
如图所示前面的三种方法我都测试过了,最后执行输出的是第四种方法,耗时最短的方法。
1.普通流方法的一个一个添加字节方法的耗时时间是:770416毫秒
2.普通流方法的一个一个数组添加字节方法的耗时时间是:726.0毫秒
3.缓冲字节流的方法复制视频文件,一个个字节添加的耗时时间是:4775毫秒
4.缓冲字节流的方法复制视频文件,一个一个数组添加的方法的耗时时间是:279.0毫秒
其实可以看出除了第二,第四种方法可取之外,其它都不可取。
这里可以做一个总结就是:最好使用缓冲字节流的方法复制视频文件等这些大型的文件,要用字节数组添加的方法来添加字节,这种方法是最快的。下面我放出复制该视频最快的代码。
public static void BufferedOneArrayOne() throws
IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\Users\\yasuo\\Videos\\Captures" +
"\\Cyberpunk 2077.mp4"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("NewTest\\src\\IT008\\bos1.mp4"));
byte[] bytes = new byte[2048];
int len;
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes,0,len);
}
bis.close();
bos.close();
}
可以看得出这是封装了一个方法,首先声明一个字节缓冲输入流的对象命名为bis,然后构造参数是new FileInputStream 这个里面的参数是抽象文件路径(就是选定要读取的文件)。然后再声明一个字节缓冲输出流的对象参数是 指定文件输出流的文件位置,如果该路径下没有该文件它就会创建一个这个类型的文件再进行输入数据。
第三步声明一个字节数组。数组长度为1024的整数倍就行了。然后再声明 一个 int类型数据 用来记录数组的读取长度,最后用一个while循环 用来逐个添加数组,如果添加过程中的read() 返回值不是-1 就会一直添加,如果等于-1证明文件的流读到末尾了。 最后不要忘了关闭流,释放资源。
最后再展示一下第二种和第三种方法作为参考,下面是第二种方法
public static void MethodOneArrayOne() throws
IOException {
FileInputStream fis=new FileInputStream("C:\\Users\\yasuo\\Videos\\Captures" +
"\\Cyberpunk 2077.mp4");
FileOutputStream fos=new FileOutputStream("NewTest\\src\\IT008\\fos1.mp4");
//开始添加
byte[] bytes = new byte[2048];
int len;
while ((len = fis.read(bytes)) != -1) {
fos.write(bytes,0,len);
}
fis.close();
fos.close();
}
然后下面是第三种方法
public static void BufferedOneByOne() throws
IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\Users\\yasuo\\Videos\\Captures" +
"\\Cyberpunk 2077.mp4"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("NewTest\\src\\IT008\\bos2.mp4"));
int by;
while ((by = bis.read()) != -1) {
bos.write(by);
}
bis.close();
bos.close();
}
以上就是我要说的全部内容,如有什么问题就指出我洗耳恭听。