缓冲流的效率测试_复制文件与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(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)