java 非缓冲与缓冲数据读取比较

本文通过测试10,000个随机双精度数值的读取及平均计算过程,对比了使用缓冲技术前后的时间差异。结果显示,应用缓冲技术后,程序运行时间从16毫秒缩短至几乎为0毫秒,极大提高了数据处理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先不适用缓存技术,读取数据:

//非缓冲计时
package com.swust;
import java.io.*;
/*
 *功能:创建一个程序,写10000个随机双精度的数到一个文件中,同时测试运用缓冲和非缓冲技术
 *        
 *        读取数据,求平均数,进行这种操作所需要的时间
 *分析:
 *   在写开始操作之前,先获取当前时间
 *   再将它同操作结束后的时间作比较,以此判断各个操作的时间
 *实现:
 *   仍使用两个类:
 */
public class flowTest {
 
    public static void main(String[] args) {
    
          double sum=0;
          try{
              long start=System.currentTimeMillis();
              FileInputStream fileIn = new FileInputStream("sample.ini");
              DataInputStream in=new DataInputStream(fileIn);
              for (int i=0;i<10000;i++){
                 sum+= in.readDouble();
              }
              in.close();
              long stop=System.currentTimeMillis();
              System.out.println("平均数:"+(sum/10000));
              System.out.println("程序运行了:"+(stop-start));
          }catch(Exception e){
              System.out.println(e.toString());
          }
          
    }
    

}

运行结果:

平均数:0.5061121254198577
程序运行了:16


使用缓冲技术:

//非缓冲计时
package com.swust;
import java.io.*;
/*
 *功能:创建一个程序,写10000个随机双精度的数到一个文件中,同时测试运用缓冲和非缓冲技术
 *        
 *        读取数据,求平均数,进行这种操作所需要的时间
 *分析:
 *   在写开始操作之前,先获取当前时间
 *   再将它同操作结束后的时间作比较,以此判断各个操作的时间
 *实现:
 *   仍使用两个类:
 */
public class flowTest {
 
    public static void main(String[] args) {
    
          double sum=0;
          try{
              long start=System.currentTimeMillis();
              FileInputStream fileIn = new FileInputStream("sample.ini");
              ////////////////////////////////////////
              BufferedInputStream bfs_in =new  BufferedInputStream(fileIn);
              DataInputStream in=new DataInputStream(bfs_in);
              ////////////////////////////////////////
              for (int i=0;i<10000;i++){
                 sum+= in.readDouble();
              }
              in.close();
              long stop=System.currentTimeMillis();
              System.out.println("使用缓冲后\n平均数:"+(sum/10000));
              System.out.println("程序运行了:"+(stop-start));
          }catch(Exception e){
              System.out.println(e.toString());
          }
          
    }
    

}

运行结果:

使用缓冲后
平均数:0.5061121254198577
程序运行了:0

完成这个操作几乎不到一秒的时间,这种改善非常大,读取数据的时间几乎可以忽略,所以在大数据输入的时候应该采用缓冲流

 

转载于:https://www.cnblogs.com/shuqingstudy/p/4728700.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值