没有取之不尽,用之不竭的资源。server有限的带宽。运营商可以限制一点点。近期使用云存储openstack swift待办事项文件存储下载。如果第一个限速code:

private Long writeResponse(HttpServletResponse response,InputStream stream, Long speed, Long startTime, MessageDigest md5) {
byte[] b = null;
b = new byte[SwiftFileDownload.Download_Read_Unit];
try {
OutputStream os = null;
os = response.getOutputStream();
long count = 0;
int j;
while ((j = stream.read(b)) != -1) { if (count + j > speed) {
int need = (int) (speed - count);
// 剩下的数
int left = (int) (j + count - speed);
byte[] temp = new byte[need];
byte[] leftTemp = new byte[left];
System.arraycopy(b, 0, temp, 0, need);
System.arraycopy(b, need, leftTemp, 0, left);
os.write(temp);
md5.update(temp);
os.flush();
long endTime = System.currentTimeMillis();
long sleepTime = startTime + 1000 - endTime;
if (sleepTime > 0) {
Thread.sleep(sleepTime);
} startTime = System.currentTimeMillis();
count = 0;
os.write(leftTemp);
md5.update(leftTemp);
os.flush();
count += left;
continue;
} if (count + j < speed) {
count += j;
byte[] temp = new byte[j];
System.arraycopy(b, 0, temp, 0, j);
os.write(temp);
md5.update(b);
os.flush();
continue;
} if (count + j == speed) {
byte[] temp = new byte[j];
System.arraycopy(b, 0, temp, 0, j);
os.write(temp);
md5.update(b);
os.flush();
long endTime = System.currentTimeMillis();
long sleepTime = startTime + 1000 - endTime;
if (sleepTime > 0) {
Thread.sleep(sleepTime);
}
// 重置计数器
startTime = System.currentTimeMillis();
count = 0;
continue; }
} } catch (IOException e1) {
log.warn("writeResponse() - response=" + response + ", IOException",e1);
throw new BusinessSwiftException(e1);
} catch (InterruptedException e) {
log.warn("writeResponse() - response=" + response + ", IOException",e);
throw new BusinessSwiftException(e);
} finally {
try {
stream.close();
} catch (IOException e) {
log.warn("writeResponse() - 关闭swift对象流出错", e);
throw new BusinessSwiftException(e);
}
} return startTime; }

基本的思想:一段时细胞内写入数据流。暂停1其次减去所有的时间进行读写操作。在发现10%左右浮动。

版权声明:本文博主原创文章,博客,未经同意不得转载。

Java服务器下载速度的限制的更多相关文章

  1. Java服务器对外提供接口以及Android端向服务器请求数据

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5056780.html 讲解下java服务器是如何对移动终端提供接口的,以什么数据格式提供出去,移动端又是怎么 ...

  2. 转:java服务器安全指南

    转: http://drops.wooyun.org/web/16609 JAVA安全之JAVA服务器安全漫谈 z_zz_zzz · 2016/06/08 10:50 0x00 前言 本文主要针对JA ...

  3. POST不同提交方式对应的Content-Type,及java服务器接收参数方式

    POST不同提交方式对应的Content-Type,及java服务器接收参数方式 注:本博客参考了网上的文章结合自己工作总结后所写,主要用于记录自己工作所得,如有错误请批评指正. 简介: Conten ...

  4. Java服务器内存过高&CPU过高问题排查

    一.内存过高 1.内存过高一般有两种情况:内存溢出和内存泄漏 (1)内存溢出:程序分配的内存超出物理机的内存大小,导致无法继续分配内存,出现OOM报错 (2)内存泄漏:不再使用的对象一直占据着内存不释 ...

  5. 如何热更新线上的Java服务器代码

    一.前言 1.热更新代码的场景 (1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日志或者增加一些调试代码,如果我们去改代码重新部署,会破坏问题现场,可以通过热部署的 ...

  6. tomcat和nginx配置java服务器

    tomcat和nginx配置java服务器 环境配置 服务器配置  写了这么久的SSM,做了一个简单的网站[没有加入数据库],然后就要开始部署javaWEB的云服务器了.本次搭建使用的Tomcat和n ...

  7. 在C#客户端用HTTP上传文件到Java服务器

    在C#客户端用HTTP上传文件到Java服务器  来源:http://www.cnblogs.com/AndyDai/p/5135294.html 最近在做C / S 开发,需要在C#客户端上传文件到 ...

  8. JAVA服务器与C#客户端的通信技术调研

    JAVA服务器与C#客户端的通信技术调研 研究背景及目的: ARPG项目的需求:需要将现有的服务器从C++的编写平台换为java语言.在对需求进行分析的过程中,发现几点需要研究实现的问题 java与c ...

  9. JProfiler 解决 Java 服务器的性能跟踪

    作者:徐建祥(netpirate@gmail.com) 时间: 2006/01/05 来自:http://www.anymobile.org 1.摘要......................... ...

随机推荐

  1. ExtJS4.2学习(7)——基础知识之Reader&Writer篇

    Reader: 主要用于将proxy数据代理读取的数据按照不同的规则进行解析,将解析好的数据保存到Modle中. 结构图 Ext.data.reader.Reader 读取器的根类(很少直接实例化这个 ...

  2. Java引用类型具体解释

    JVM  的垃圾回收器对于不同类型的引用有不同的处理方式.java中对于一个对象来说,仅仅要有引用的存在,它就会一直存在于内存中.假设这种对象越来越多,超出了JVM中的内存总数,JVM就会抛出OutO ...

  3. Android actionbar 搜索框

    就是实如今顶部这种搜索框. 一.这个搜索框是actionbar上的menu上的一个item.叫SearchView.我们能够先在menu选项里定义好: bmap_menu.xml: <?xml ...

  4. Oracle Client: TNS: Connect timeout ocurred.

    1. 检查Oracle Server 的防火墙是否关闭. 2. Client, Server 重启.

  5. 启动和关闭JBoss As 7.1.1脚本

    启动和关闭JBoss As 7.1.1,脚本例如以下djboss.sh: #!/bin/sh #JBOSS_HOME JBOSS_HOME=/opt/jboss case "$1" ...

  6. SE 2014年5月25日

    如图配置 两实验 R1模拟总部,R2 与R3模拟分部 实验一  要求使用 IPSec VPN 主模式,使得总部与两分部内网可相互通讯 步骤: 1.  配置默认路由 [RT1]ip route-stat ...

  7. ubuntu linux 13.04更新

    首先备份源列表: sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup 而后用gedit或其他编辑器打开: gksu gedit /et ...

  8. 2014牡丹江——Hierarchical Notation

    problemId=5380" style="background-color:rgb(51,255,51)">题目链接 字符串模拟 const int MAXN ...

  9. Wooden Sticks(杭州电1051)

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  10. C陷阱与缺陷之语法陷阱

    2.1理解函数声明 不论什么C变量的声明都由两部分组成:类型以及一组类似表达式的声明符号.比如 float f; 这个声明的含义是:当对其求值时,表达式f和g的类型为浮点数类.由于声 明符与表达式的相 ...