Java服务器下载速度的限制
没有取之不尽,用之不竭的资源。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服务器下载速度的限制的更多相关文章
- Java服务器对外提供接口以及Android端向服务器请求数据
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5056780.html 讲解下java服务器是如何对移动终端提供接口的,以什么数据格式提供出去,移动端又是怎么 ...
- 转:java服务器安全指南
转: http://drops.wooyun.org/web/16609 JAVA安全之JAVA服务器安全漫谈 z_zz_zzz · 2016/06/08 10:50 0x00 前言 本文主要针对JA ...
- POST不同提交方式对应的Content-Type,及java服务器接收参数方式
POST不同提交方式对应的Content-Type,及java服务器接收参数方式 注:本博客参考了网上的文章结合自己工作总结后所写,主要用于记录自己工作所得,如有错误请批评指正. 简介: Conten ...
- Java服务器内存过高&CPU过高问题排查
一.内存过高 1.内存过高一般有两种情况:内存溢出和内存泄漏 (1)内存溢出:程序分配的内存超出物理机的内存大小,导致无法继续分配内存,出现OOM报错 (2)内存泄漏:不再使用的对象一直占据着内存不释 ...
- 如何热更新线上的Java服务器代码
一.前言 1.热更新代码的场景 (1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日志或者增加一些调试代码,如果我们去改代码重新部署,会破坏问题现场,可以通过热部署的 ...
- tomcat和nginx配置java服务器
tomcat和nginx配置java服务器 环境配置 服务器配置 写了这么久的SSM,做了一个简单的网站[没有加入数据库],然后就要开始部署javaWEB的云服务器了.本次搭建使用的Tomcat和n ...
- 在C#客户端用HTTP上传文件到Java服务器
在C#客户端用HTTP上传文件到Java服务器 来源:http://www.cnblogs.com/AndyDai/p/5135294.html 最近在做C / S 开发,需要在C#客户端上传文件到 ...
- JAVA服务器与C#客户端的通信技术调研
JAVA服务器与C#客户端的通信技术调研 研究背景及目的: ARPG项目的需求:需要将现有的服务器从C++的编写平台换为java语言.在对需求进行分析的过程中,发现几点需要研究实现的问题 java与c ...
- JProfiler 解决 Java 服务器的性能跟踪
作者:徐建祥(netpirate@gmail.com) 时间: 2006/01/05 来自:http://www.anymobile.org 1.摘要......................... ...
随机推荐
- ExtJS4.2学习(7)——基础知识之Reader&Writer篇
Reader: 主要用于将proxy数据代理读取的数据按照不同的规则进行解析,将解析好的数据保存到Modle中. 结构图 Ext.data.reader.Reader 读取器的根类(很少直接实例化这个 ...
- Java引用类型具体解释
JVM 的垃圾回收器对于不同类型的引用有不同的处理方式.java中对于一个对象来说,仅仅要有引用的存在,它就会一直存在于内存中.假设这种对象越来越多,超出了JVM中的内存总数,JVM就会抛出OutO ...
- Android actionbar 搜索框
就是实如今顶部这种搜索框. 一.这个搜索框是actionbar上的menu上的一个item.叫SearchView.我们能够先在menu选项里定义好: bmap_menu.xml: <?xml ...
- Oracle Client: TNS: Connect timeout ocurred.
1. 检查Oracle Server 的防火墙是否关闭. 2. Client, Server 重启.
- 启动和关闭JBoss As 7.1.1脚本
启动和关闭JBoss As 7.1.1,脚本例如以下djboss.sh: #!/bin/sh #JBOSS_HOME JBOSS_HOME=/opt/jboss case "$1" ...
- SE 2014年5月25日
如图配置 两实验 R1模拟总部,R2 与R3模拟分部 实验一 要求使用 IPSec VPN 主模式,使得总部与两分部内网可相互通讯 步骤: 1. 配置默认路由 [RT1]ip route-stat ...
- ubuntu linux 13.04更新
首先备份源列表: sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup 而后用gedit或其他编辑器打开: gksu gedit /et ...
- 2014牡丹江——Hierarchical Notation
problemId=5380" style="background-color:rgb(51,255,51)">题目链接 字符串模拟 const int MAXN ...
- Wooden Sticks(杭州电1051)
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- C陷阱与缺陷之语法陷阱
2.1理解函数声明 不论什么C变量的声明都由两部分组成:类型以及一组类似表达式的声明符号.比如 float f; 这个声明的含义是:当对其求值时,表达式f和g的类型为浮点数类.由于声 明符与表达式的相 ...