其他分享
首页 > 其他分享> > BufferedInputStream_字节缓冲输入流和缓冲流的效率测试_复制文件

BufferedInputStream_字节缓冲输入流和缓冲流的效率测试_复制文件

作者:互联网

继承父类的成员方法:
  int read() 从输入流中读取数据的下一个字节
  int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中
  void close() 关闭此输入流并释放与该流相关的所有系统资源
构造方法:
  BufferedInputStream(InputStream in) 创建一个BufferedOutputStream 并保存其参数,即输入流in,以便将来使用
  BufferedInputStream(InputStream in,int size) 创建具有指定缓冲区大小的BufferedInputStream并保存其参数,即输入流
  参数:
    InputStream in :字节输入流
      我们可以传递FileInputStream,缓冲流会给FileInputStream增加一个缓冲区,提高FileInputStream的读取效率
    int size:指定缓冲流内部缓冲区的大小,不指定默认
使用步骤:(重点):
  1.创建FileInputStream对象,构造方法中要绑定要读取的对象
  2.创建BufferedInputStream对象,构造方法中传递FileInputStream对象,提高FileInputStream对象的读取效率
  3.使用BufferedInputStream对象中的发方法,读取文件
  4.释放资源

 1 public class Demo02BufferedInputStream {
 2     public static void main(String[] args) throws IOException {
 3         //1.创建FileInputStream对象,构造方法中要绑定要读取的对象
 4         FileInputStream fis = new FileInputStream("day10_IO\\a.txt");
 5         //2.创建BufferedInputStream对象,构造方法中传递FileInputStream对象,提高FileInputStream对象的读取效率
 6         BufferedInputStream bis = new BufferedInputStream(fis);
 7         //3.使用BufferedInputStream对象中的发方法,读取文件
 8         //int read() 从输入流中读取数据的下一个字节
 9         /*int len = 0; // 记录每次读取到的字节
10         while((len = bis.read()) != -1){
11             System.out.println( len);
12         }*/
13 
14         //int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中
15         byte[] bytes = new byte[1024];//存储每次读取的数据
16         int len = 0; //记录每次读取到的字节
17         while((len = bis.read(bytes)) != -1){
18             System.out.println(new String(bytes,0,len));
19         }
20         //4.释放资源
21         bis.close();
22     }
23 }

 

文件复制练习:一读一写
明确:
  数据源: c:\\1.jpg
  数据的目的地: d:\\1.jpg
文件复制的步骤:

  1.创建一个字节输入流对象,构造方法中绑定要读取的数据

  2.创建一个字节输出流对象,构造方法中绑定要写入的目的地

  3.使用字节输入流对象中的方法read读取文件

  4.使用字节输出流中的方法write,把读取到的字节写入到目的地的文件中

  5.释放资源

文件的大小:780,831 字节

一次读写一个字节:6043毫秒

使用数组缓冲读取多个字节,写入多个字节:10毫秒

public class Demo01CopyFile {
    public static void main(String[] args) throws IOException {
        long s = System.currentTimeMillis();
        //1.创建一个字节输入流对象,构造方法中绑定要读取的数据源
        FileInputStream fis = new FileInputStream("c:\\1.jpg");
        //2.创建一个字节输出流对象,构造方法中绑定要写入的目的地
        FileOutputStream fos = new FileOutputStream("d:\\1.jpg");
        //一次读取一个字节写入一个字节的方式
        //3.使用字节输入流对象中的方法read读取文件
        /*int len = 0;
        while((len = fis.read())!=-1){
            //4.使用字节输出流中的方法write,把读取到的字节写入到目的地的文件中
            fos.write(len);
        }*/
 
        //使用数组缓冲读取多个字节,写入多个字节
        byte[] bytes = new byte[1024];
        //3.使用字节输入流对象中的方法read读取文件
        int len = 0;//每次读取的有效字节个数
        while((len = fis.read(bytes))!=-1){
            //4.使用字节输出流中的方法write,把读取到的字节写入到目的地的文件中
            fos.write(bytes,0,len);
        }
 
        //5.释放资源(先关写的,后关闭读的;如果写完了,肯定读取完毕了)
        fos.close();
        fis.close();
        long e = System.currentTimeMillis();
        System.out.println("复制文件共耗时:"+(e-s)+"毫秒");
    }
 
}

 

 

文件复制练习:一读一写
明确:
  数据源: c:\\1.jpg
  数据的目的地: d:\\1.jpg

文件复制的步骤:

  1.创建字节缓冲输入流对象,构造方法中传递字节输入流

  2.创建字节缓冲输出流对象,构造方法中传递字节输出流

  3.使用字节缓冲输入流对象中的方法read,读取文件

  4.使用字节缓冲输出流中的方法write,把读取的数据写入到内部缓冲区中

  5.释放资源(会先把缓冲区中的数据,刷新到文件中)

文件的大小:780,831 字节

一次读写一个字节:32毫秒

使用数组缓冲读取多个字节,写入多个字节:5毫秒

public class Demo02CopyFile {
    public static void main(String[] args) throws IOException {
        long s = System.currentTimeMillis();
        //1.创建字节缓冲输入流对象,构造方法中传递字节输入流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("c:\\1.jpg"));
        //2.创建字节缓冲输出流对象,构造方法中传递字节输出流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("d:\\1.jpg"));
        //3.使用字节缓冲输入流对象中的方法read,读取文件
        //一次读取一个字节写入一个字节的方式
        /*int len = 0;
        while((len = bis.read())!=-1){
            bos.write(len);
        }*/
 
        //使用数组缓冲读取多个字节,写入多个字节
        byte[] bytes = new byte[1024];
        int len = 0;
        while((len = bis.read(bytes))!=-1){
            bos.write(bytes,0,len);
        }
 
        bos.close();
        bis.close();
 
        long e = System.currentTimeMillis();
        System.out.println("复制文件共耗时:"+(e-s)+"毫秒");
    }
}

 

标签:字节,构造方法,BufferedInputStream,缓冲,len,read,FileInputStream,读取
来源: https://www.cnblogs.com/xuche/p/16460381.html