没有取之不尽,用之不竭的资源。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. SmartDraw2008破解过程总结

    SmartDraw2008破解过程总结作者:chszs  原创转载请保留作者名. 按下列步骤完毕,保证能够支持中文. 一.所需软件:1)SmartDraw2008安装软件:2)SmartDraw200 ...

  2. python语言学习3 ——第一个python程序

    输入exit即退出,这样写的缺点是没有保存已经写的代码,下次需要重新写

  3. A Game of Thrones(13) - Tyrion

    The north went on forever. Tyrion Lannister knew the maps as well as anyone, but a fortnight on the ...

  4. [置顶] Guava学习之Multimap

    相信大家对Java中的Map类及其之类有大致的了解,Map类是以键值对的形式来存储元素(Key->Value),但是熟悉Map的人都知道,Map中存储的Key是唯一的.什么意思呢?就是假如我们有 ...

  5. Thinkphp中的volist标签(查询数据集(select方法)的结果输出)用法简介

    参考网址:http://camnpr.com/archives/1515.html 通常volist标签多用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数 ...

  6. Study note for Continuous Probability Distributions

    Basics of Probability Probability density function (pdf). Let X be a continuous random variable. The ...

  7. java 常用的包 默认导入的包

    1.java.lang----包含一些Java语言的核心类,如String.Math.Integer.System和Thread,提供常用功能. 2.java.awt----包含了构成抽象窗口工具集( ...

  8. android细节之禁用activity的系统的默认切换效果

    网上有非常多方法来禁用系统的默认效果,这里贴上来我觉得最简单的方法. overridePendingTransition(Animation.INFINITE, Animation.INFINITE) ...

  9. ExtJS与JQuery对照

    首先在介绍ExtJS和JQuery,然后进行比较 一个.什么是ExtJS? 1.ExtJS能够用来开发RIA也即富client的AJAX应用,是一个用javascript写的,主要用于创建前端用户界面 ...

  10. crashRpt用法

    从官网上下载crashRpt的源代码,按说明编译出对应的lib和dll 1 在编译crashRpt的时候,在环境变量中设置  crashrptDir=D:\work\AIW\WebMicaps\Web ...