IO流:字节流复制视频

字节流:

字节输出流:OutputStream

OutputStream有很多子类,其中子类FileOutputStream可用来写入数据到文件。

FileOutputStream,即文件输出流是用于将数据写入 File的输出流。

  FileOutputStream(String name):创建一个具有指定名称的文件中写入数据的输出文件流

字节输入流:InputStream

   int read():读取一个字节并返回,没有字节返回-1.

  int read(byte[]): 读取一定量的字节数,并存储到字节数组中,返回读取到的字节数。

InputStream有很多子类,其中子类FileInputStream可用来读取文件内容。

FileInputStream 从文件系统中的某个文件中获得输入字节。

下面是一个字节流复制视频的小案例:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

public class Work01 {
 public static void main(String[] args) throws IOException {
  //一个数组一个数组复制
  Date date=new Date();
  System.out.println("开始时间:"+date.getTime());
  //明确数据源
  FileInputStream fis=new FileInputStream("D:\\io1227\\video\\AMG_GT_ALL_4_original.mp4");
  //明确目的地
  FileOutputStream fos=new FileOutputStream("D:\\io1227\\mp4.mp4");
  //开始复制
  byte[] bytes=new byte[1024];
  int len=0;
  while((len=fis.read(bytes))!=-1){
   fos.write(bytes);
  }
  fis.close();
  fos.close();
  Date date2=new Date();
  System.out.println("数组复制结束时间:"+date2.getTime());
  //一个字节一个字节复制
  FileInputStream fis2=new FileInputStream("D:\\io1227\\video\\AMG_GT_ALL_4_original.mp4");
  FileOutputStream fos2=new FileOutputStream("D:\\io1227\\mp5.mp4");
  int len2=0;
  while((len2=fis2.read())!=-1){
   fos2.write(len2);
  }
  fis2.close();
  fos2.close();
  Date date3=new Date();
  System.out.println("字节复制结束时间:"+date3.getTime());
  System.out.println("数组复制用时:"+(date2.getTime()-date.getTime())+"毫秒");
  System.out.println("字节复制用时:"+(date3.getTime()-date2.getTime())+"毫秒");
 }
}

这是复制了一个大小为2330KB的小视频,非常明显数组比字节的效率要高很多

猜你喜欢

转载自www.cnblogs.com/nbkls/p/12743512.html