缓冲流的效率测试_复制文件与BufferedWriter_字符缓冲输出流

缓冲流的效率测试_复制文件

效率测试

查询API,缓冲流读写方法与基本的流是一致的,我们通过复制大文件( 375MB),测试它的效率。

package DemoThreadPool;

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

/*
   文件复制练习:一都一写


   文件复制的步骤:
        1.创建一个字节输入流对象,构造方法中绑定要读取的数据源
        2.创建一个字节输出流对象,构造方法中绑定要写入的目的地
        3.使用字节输入流对象中的方法read读取文件
        4.使用字节输出流中的方法write,把读取到的字节写入到目的地的文件中
        5.释放资源

   文件的大小:5,808,587 字节
       一次读写一个字节:57219毫秒
       使用数组缓冲读取多个字节,写入多个字节:97毫秒
            */
public class Demo01File {
       public static void main(String[] args) throws IOException {
           long s = System.currentTimeMillis();
         //  1.创建一个字节输入流对象,构造方法中绑定要读取的数据源
           FileInputStream fis = new FileInputStream("F:\\AutoClicker\\a.txt");
         //  2.创建一个字节输出流对象,构造方法中绑定要写入的目的地
           FileOutputStream fos = new FileOutputStream("F:\\AutoClicker\\b.txt");
           //一次读取一个字节写入一个字节的方式
         //  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)+"毫秒");
       }
}

 

字符缓冲流构造方法

public BuffefedReader(Reader in) ∶创建一个新的缓冲输入流。public Bufferedwriter(writer out) ︰创建一个新的缓冲输出流。

package DemoThreadPool;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

/*
java.io.Bufferedwriter extends writerBufferedwriter:字符缓冲输出流
继承自父类的共性成员方法:
- void write(int c)写入单个字符。
- void write( char[]cbuf)写入字符数组。
- abstract void write(char[ ] cbuf,int off,int len)写入字符数组的某一部分, off数组的开始索引,Len写的字符个数。- void write( String str)写入字符串。
- void write(String str, int off, int len)写入字符串的某一部分, off字符串的开始索引, Len写的字符个数。- void flush()刷新该流的缓冲。
- void close()关闭此流,但要先刷新它。
构造方法:
Bufferedwriter(writer out)创建一个使用黑f认大小输出缓冲区的缓冲字符输出流。
Bufferedwriter(writer out, int sz)创建一个使用给定大小输出缓冲区的新缓冲字符输出流。参数:
lwriter out:字符输出流
我们可以传递FiLewriter ,缓冲流会给FiLewriter增加一个缓冲区,提高FiLewriter的写入效率int sz:指定缓冲区的大小,不写黑默认大小
特有的成员方法:
void newline()写入一个行分隔符。会根据不同的操作系统,获取不同的行分隔符换行:换行符号
windows : lrlnlinux : / n
mac : / r使用步骤:
1.创建字符缓冲输出流对象,构造方法中传递字符输出流
2.调用字符缓冲输出流中的方法write,把数据写入到内存缓冲区中
3.调用字符缓冲输出流中的方法flush,把内存缓冲区中的数据,刷新到文件中
4 .释放资源
 */
public class Demo03BufferedWriter {
    public static void main(String[] args) throws IOException {
        //1.创建字符缓冲输出流对象,构造方法中传递字符输出流
        BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
        //2.调用字符缓冲输出流中的方法write,把数据写入到内存缓冲区中
        for (int i = 0; i < 10; i++) {
            bw.write("虎牙直播");
//            bw.write("\r\n");
            bw.newLine();
        }
        //3.调用字符缓冲输出流中的方法flush,把内存缓冲区中的数据,刷新到文件中
        bw.flush();
        //4 .释放资源
        bw.close();
    }
}

 

posted @ 2022-07-13 10:07  zj勇敢飞,xx永相随  阅读(41)  评论(0编辑  收藏  举报