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

  1. private Long writeResponse(HttpServletResponse response,InputStream stream, Long speed, Long startTime, MessageDigest md5) {
  2. byte[] b = null;
  3. b = new byte[SwiftFileDownload.Download_Read_Unit];
  4. try {
  5. OutputStream os = null;
  6. os = response.getOutputStream();
  7. long count = 0;
  8. int j;
  9. while ((j = stream.read(b)) != -1) {
  10.  
  11. if (count + j > speed) {
  12. int need = (int) (speed - count);
  13. // 剩下的数
  14. int left = (int) (j + count - speed);
  15. byte[] temp = new byte[need];
  16. byte[] leftTemp = new byte[left];
  17. System.arraycopy(b, 0, temp, 0, need);
  18. System.arraycopy(b, need, leftTemp, 0, left);
  19. os.write(temp);
  20. md5.update(temp);
  21. os.flush();
  22. long endTime = System.currentTimeMillis();
  23. long sleepTime = startTime + 1000 - endTime;
  24. if (sleepTime > 0) {
  25. Thread.sleep(sleepTime);
  26. }
  27.  
  28. startTime = System.currentTimeMillis();
  29. count = 0;
  30. os.write(leftTemp);
  31. md5.update(leftTemp);
  32. os.flush();
  33. count += left;
  34. continue;
  35. }
  36.  
  37. if (count + j < speed) {
  38. count += j;
  39. byte[] temp = new byte[j];
  40. System.arraycopy(b, 0, temp, 0, j);
  41. os.write(temp);
  42. md5.update(b);
  43. os.flush();
  44. continue;
  45. }
  46.  
  47. if (count + j == speed) {
  48. byte[] temp = new byte[j];
  49. System.arraycopy(b, 0, temp, 0, j);
  50. os.write(temp);
  51. md5.update(b);
  52. os.flush();
  53. long endTime = System.currentTimeMillis();
  54. long sleepTime = startTime + 1000 - endTime;
  55. if (sleepTime > 0) {
  56. Thread.sleep(sleepTime);
  57. }
  58. // 重置计数器
  59. startTime = System.currentTimeMillis();
  60. count = 0;
  61. continue;
  62.  
  63. }
  64. }
  65.  
  66. } catch (IOException e1) {
  67. log.warn("writeResponse() - response=" + response + ", IOException",e1);
  68. throw new BusinessSwiftException(e1);
  69. } catch (InterruptedException e) {
  70. log.warn("writeResponse() - response=" + response + ", IOException",e);
  71. throw new BusinessSwiftException(e);
  72. } finally {
  73. try {
  74. stream.close();
  75. } catch (IOException e) {
  76. log.warn("writeResponse() - 关闭swift对象流出错", e);
  77. throw new BusinessSwiftException(e);
  78. }
  79. }
  80.  
  81. return startTime;
  82.  
  83. }

基本的思想:一段时细胞内写入数据流。暂停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. 七古&#183;夏泳小梅沙

    七古·夏泳小梅沙 文/天地尘埃2020 近日与同学等海泳小梅沙,归后背黑而焦灼如针刺.一周后焦皮始脱尽,发现还是往日那个黄种人.涂鸦一文以记之. 一湾碧水青山前, 夏日方来酷暑煎. 疏狂仅仅愿清凉刻, ...

  2. Kafka 高性能吞吐揭秘

    Kafka 高性能吞吐揭秘   Kafka作为时下最流行的开源消息系统,被广泛地应用在数据缓冲.异步通信.汇集日志.系统解耦等方面.相比较于RocketMQ等其他常见消息系统,Kafka在保障了大部分 ...

  3. 手机装linux系统

    第一步: 首先 , 你的手机需要获取root权限. 如果不知道如何获取, 可以到电脑上搜索一下安卓手机root教程. 不同品牌的手机root的方法不同. 也可以到机锋论坛上寻找root的具体方法. 第 ...

  4. 用JS实现发邮件的功能 完美解决

    怎样用JS实现发邮件的功能? 我想用JS实现把页面文本框中的内容直接通过邮件的方式发送到一个指定的邮箱.fengxq给出的答案是<script language=javascript>if ...

  5. C#List<long>与String(Linq)

    1.string => List<long> string ShopIds = "1,2,3"; var ShopIdList = ShopIds.Split(' ...

  6. POJ3050 Hopscotch 【DFS】

    Hopscotch Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2113   Accepted: 1514 Descrip ...

  7. 碎碎念,浅饮-------Day30

    这不是关于技术的文章,它偏离了我原来的计划轨迹.但,我相信这将是远远超出了技术的意义使我无论什么价格值. 高考已经开始,不知道在这片宁静的夜空下有多少人已经美美的睡了,香甜憨然.又有多少人这睡着的眼角 ...

  8. 在项目里交叉使用Swift和OC

    Swift and Objective-C in the Same Project 在项目里交叉使用Swift和OC Swift与OC的兼容性使得你能够在项目里使用Swift+OC的方式编写应用程序, ...

  9. hdu 3790 (最短路径问题dijkstra)

    主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起 ...

  10. String,StringBuffer以及StringBuilder的差别

    1.定义: String:String 类代表字符串. Java 程序中的全部字符串字面值(如"abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改. 字符 ...