IO流的字节流的缓冲和非缓冲方式的区别及性能对比:
验证方式:复制相同的文件到E盘并对比花费的时间,代码如下。
package com.led.io; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; public class Buffer_Pro { /* * 非缓冲复制文件 */ public static void steam()throws Exception{ InputStream inputStream=new FileInputStream("E://党//111.docx"); OutputStream outputStream=new FileOutputStream("E://复制的.docx"); int b=0; long startTime=System.currentTimeMillis(); while((b=inputStream.read())!=-1){//读取到最后一个字节返回-1 outputStream.write(b); } inputStream.close();//关闭输入流 outputStream.close();//关闭输出流 long endTime=System.currentTimeMillis(); System.out.println("非缓冲复制花费的时间是:"+(endTime-startTime)+"ms"); } /* * 带缓冲的复制文件 */ public static void bufferstream() throws Exception{ BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream("E://党//111.docx")); BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream("E://复制的2.docx")); int b=0; long startTime=System.currentTimeMillis();//开始时间 while((b=bufferedInputStream.read())!=-1){//读取到最后一个字节返回-1 bufferedOutputStream.write(b); } bufferedInputStream.close();//关闭输入流 bufferedOutputStream.close();//关闭输出流 long endTime=System.currentTimeMillis();//结束时间 System.out.println("缓冲复制花费的时间是:"+(endTime-startTime)+"ms"); } public static void main(String[] args) throws Exception { steam(); bufferstream(); } }
测试结果:
原因:使用缓冲其实是在内存中开辟了一个缓冲区,用来存放数据,相当于一个中转站,因此效率更加高效。