`
lenjey
  • 浏览: 90771 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

一个java流量控制小程序

阅读更多
在开发中,常常会遇到文件上传下载流量控制的问题,这是一个小程序,简单的实现了这个功能,可以参考一下
public class FlowControlInputStream extends FilterInputStream{    

    public static void main(String[] args){ 
        try{ 
            byte[] buffer = new byte[8092];        
            int n;       
            long start = System.currentTimeMillis(); 
            FileInputStream in = new FileInputStream("E:\\pic.rar"); 
            //限制流量为10000也就是10000=10kbps 
            FlowControlInputStream fin = new FlowControlInputStream(in, 40000);        
           // fin.update(1000);          
            System.out.println("当前速率:"+fin.check()/1000+"kbps"); 
            System.out.println("当前文件大小:"+fin.available()/1024+"kb"); 
            while( (n = fin.read(buffer)) > 0); 
            fin.close();                
            long end = System.currentTimeMillis(); 
            System.out.println("读取文件完成,共花掉"+(end-start)/600+"秒"); 
        }catch(IOException e){ 
            e.printStackTrace(); 
        } 
    } 
  

	private long timestamp; 
    private int maxbps; 
    private int currentbps; 
    private int bytesread; 
    
    //---------------------------------------------------------- 
    //constructor 
    public FlowControlInputStream(InputStream in, int maxbps){ 
        super(in); 
        this.maxbps = maxbps; 
        this.currentbps = 0;        
        this.bytesread = 0; 
        this.timestamp = System.currentTimeMillis(); 
    } 
    
    //---------------------------------------------------------- 
    //decorated methods 
    
    public int read() throws IOException{ 
        synchronized(in){ 
            int avaliable = check(); 
            if(avaliable == 0){ 
                waitForAvailable(); 
                avaliable = check(); 
            } 
            int value = in.read(); 
            update(1); 
            return value; 
        } 
    } 

    public int read(byte[] b) throws IOException{ 
        return read(b, 0, b.length); 
       
    } 

    public int read(byte[] b, int off, int len) throws IOException{ 
        synchronized(in){ 
            int avaliable = check(); 
            if(avaliable == 0){ 
                waitForAvailable();                        
                avaliable = check(); 
            }        
            int n = in.read(b, off, Math.min(len, avaliable)); 
            update(n); 
            return n;   
        } 
    } 

    private int check(){ 
        long now = System.currentTimeMillis(); 
        if(now - timestamp >= 1000){ 
            timestamp = now; 
            currentbps = bytesread; 
            bytesread = 0; 
            return maxbps; 
        }else{ 
            return maxbps - bytesread; 
        } 
    } 

    private void waitForAvailable(){ 
        long time = System.currentTimeMillis() - timestamp; 
        boolean isInterrupted = false; 
        while(time < 1000){ 
            try{ 
                Thread.sleep(1000 - time); 
            }catch(InterruptedException e){ 
                isInterrupted = true; 
            } 
            time = System.currentTimeMillis() - timestamp; 
        } 
        if(isInterrupted) 
            Thread.currentThread().interrupt(); 
        return; 
        
    } 

    private void update(int n){ 
        bytesread += n; 
    } 
    
    public int getCurrentbps(){ 
        return currentbps; 
    } 
} 

代码很简单!
分享到:
评论
2 楼 wenbois2000 2010-05-07  
哥,这不能用来控制网络流量吧?
停止读取线程也不能减轻服务器段的负担
1 楼 topgunqq 2008-11-27  
很不错!正愁不知道怎么实现呢。
多谢楼主!!!

相关推荐

    java实现流量控制流量控制

    Java作为一种广泛使用的编程语言,同样提供了多种方法来实现流量控制。本篇文章将深入探讨Java如何实现流量控制,并结合具体实例来阐述相关知识点。 首先,我们要理解流量控制的基本原理。在TCP(传输控制协议)中...

    简单的java多人聊天小程序

    本项目“简单的Java多人聊天小程序”就是基于TCP协议实现的一个基础的多用户聊天应用。下面将详细介绍其设计原理、实现方式以及主要涉及的Java编程知识。 1. **TCP协议基础** TCP协议确保数据的可靠传输,通过三次...

    365赚钱宝养猫小程序流量主广告程序源码下载

    【标题】"365赚钱宝养猫小程序流量主广告程序源码下载"涉及的核心知识点主要涵盖以下几个方面: 1. **微信小程序开发**:养猫小程序是基于微信小程序平台开发的应用,利用微信庞大的用户基数来吸引流量。小程序的...

    宝宝起名神器微信小程序源码.zip

    6. **用户体验优化**:一个优秀的微信小程序应该注重用户体验。在这款源码中,可能会有针对用户交互、加载速度、页面布局等方面的优化,以确保用户在寻找合适的名字时能获得流畅的体验。 7. **姓名学原理**:宝宝...

    WordPress壁纸小程序源码

    这款小程序后端为WordPress,只需导入壁纸插件就可以轻松对小程序前端进行控制 没有任何复杂的操作,只需要有一定的建站基础就可以以学会,小程序也比较简洁,没有其他花里胡哨的功能, 基于Uniapp开发,使用...

    自助发卡小程序源码带流量主支持个人企业带支付功能

    流量主是微信小程序的一个特性,允许小程序开发者通过内置广告赚取收益。当用户点击广告或者完成特定操作时,开发者可以获得广告分成,这样可以为小程序带来持续的运营收入。 4. **支付功能**: 自助发卡小程序...

    基于java开发的微赞社区官方论坛小程序

    总结起来,"基于Java开发的微赞社区官方论坛小程序"是一个融合了Java后端技术、微信小程序前端技术和社区功能的综合项目,展现了Java在开发高效、稳定、易维护的应用中的优势,以及现代Web开发中的前后端分离、...

    [已测试]拼多多客京东客蘑菇街小程序V10.0.8完整全解密后端源码+小程序前端.rar

    拼多多客京东客蘑菇街小程序V10.0.8是一个集成拼多多、京东和蘑菇街电商平台的第三方小程序解决方案。这个版本的程序已经经过了完整的解密处理,提供了后端源码和小程序前端,允许用户进行深度定制和开发。下面将...

    流量动物救助系统微信小程序.zip

    【流量动物救助系统微信...综上所述,【流量动物救助系统微信小程序】是一个集成了微信小程序前端和Java SpringBoot、SSM后端技术的项目,旨在通过信息化手段推动动物救助工作的开展,体现了技术服务于社会公益的理念。

    java基于UDP协议的聊天程序(完整版)

    Java基于UDP协议的聊天程序是一种实现...总的来说,Java基于UDP协议的聊天程序是一个实践性的项目,涵盖了网络通信、多线程编程、输入输出处理等多个Java开发的重要领域,对于提升编程能力和理论知识都有很大的帮助。

    资源变现小程序源码,知识付费,微信小程序,激励广告流量主开源无授权。.zip

    资源变现小程序源码是开发一款基于微信小程序的平台,它主要功能是实现知识付费,让内容创作者能够将他们的知识和技能...对于希望学习微信小程序开发或了解知识付费平台运作的人来说,这是一个极好的实践和学习资源。

    最新影视微信小程序源码带后台及流量主可轻松变现,内附数据采集和系统使用教程

    本资源提供的是一个专用于影视行业的微信小程序源码,包括后台管理系统,具备流量主功能,这意味着开发者可以通过广告展示等方式轻松实现商业变现。 1. **微信小程序开发**:微信小程序的开发基于JavaScript、WXML...

    人脸识别Java程序

    - 这个Java程序可以用于安全系统,比如门禁控制,验证用户身份。 - 在社交媒体上,它可以自动标记用户上传照片中的人物。 - 在商业领域,可用于顾客分析,比如零售店的顾客流量统计。 总结来说,这个"人脸识别...

    Java服务器程序外文翻译

    Servlets是Java服务器端编程的基础,它们是运行在服务器上的Java小程序,用于处理HTTP请求并生成响应。Servlets可以与JSP结合使用,JSP主要负责视图层的呈现,而Servlets则处理控制逻辑和业务逻辑。 JPA是Java平台...

Global site tag (gtag.js) - Google Analytics