黑马程序员 之 IO流 拷贝视频 Day03

黑马程序员  之  IO流 拷贝视频



---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


    关于音频和视频的拷贝,自定义了一个字节缓冲区!

思路:一般对于IO流而言:

        1  确定 源

2  确定 目的地 

3  进行 数据的读写(一般用循环读取!)

4  关闭 资源


对于一般的文件,因为是字符码,在循环读取的时候,可以定义一个缓冲数组,这样可以加快读取的效率;

例如:  char[]  buf = new char[1024];

          int num =  0;

 while((num=fi.read(buf))!=-1)

 {

System.out.println(new String(buf,0,num));

 }


package stu.love.outputstream;



import java.io.*;



/*

 * 自定义 字节流的 缓冲区

 * 

 * */





// 输入流的 字节流缓冲区

class MyBufferedInputStream

{

  private InputStream in;

  

// 定义 缓冲数组

  private byte[] buf = new byte[1024];

  

// 定义指针

  private int pos=0;

  

// 定义计数器

  private int count=0;

  

  

 MyBufferedInputStream(InputStream in)

 {

    this.in = in;

 }

  

  

// 一次 读取 一个字节! 从缓冲区 获取!

  public int myRead() throws IOException

 {

//   当 缓冲区 的数据 取尽 之后 在 重新装入!

    if(count==0)

   {

//     1 通过 in 对象,读取 硬盘中的数据 存放到buf 中! 

      count = in.read(buf);

      

      //退出 条件! 读取到文件的最后 要 退出条件!

      if(count<0)

        return -1;

      

      //读取之后 指针置零!

      pos = 0;

      

//     获取第一个数据

      byte b = buf[pos];

      

//     计数器 递减

      count--;

//     指针递增! 读取下一个字节!

      pos++;

      

      return b&255;

      

   }

    else if(count >0)

   {



//     获取下一个数据

      byte b = buf[pos];

      

//     计数器 递减

      count--;

//     指针递增! 读取下一个字节!

      pos++;

      

      return b&0xff;

   }

    

    return -1;

 }

  

// 关闭!

  public void myClose() throws IOException

 {

    in.close();

 }

  

}





// 输出流的字节流缓冲区

class MyBufferedOutputStream

{

  

}





public class MyBufferedStream {



  /**

 * @param args

 */

  public static void main(String[] args) throws IOException{

    // TODO Auto-generated method stub



    long start = System.currentTimeMillis();

    copy_2();

    long end = System.currentTimeMillis();

    

   System.out.println("花费时间="+(end-start)+"毫秒");

 }

  



// 1 使用字节流缓冲区 完成复制!

  public static void copy_2() throws IOException

 {



//   1 源


   MyBufferedInputStream bufi = new MyBufferedInputStream(new FileInputStream("Dance.mp4"));

    

//   2 目的


    BufferedOutputStream bufo = new BufferedOutputStream(new FileOutputStream("Dance_copy2.mp4"));

    

//   3 操作

    int by = 0;

    

    

//   找到问题的原因?

//   System.out.println("第一个字节:"+bufi.myRead());

    

    //直接进行 流的操作!

//   读取 和 写入 同时 进行啊!

    while((by=bufi.myRead())!=-1)

   {

     bufo.write(by);

   }

      

    

//   4 关闭

   bufi.myClose();

   bufo.close();

 }



}

 




---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值