java ServletOutputStream 输出流 输出的视频文件为什么会字节减少?

时间:2021-06-08 21:02:30
/**
 * 24h回放节目下载
 * @param request
 * @param response
 * @return
 */
public ModelAndView downLoad(HttpServletRequest request,
HttpServletResponse response) {
HttpURLConnection httpUrl = null;
URL url  = null;
try{
/************************客户端下载*********************/
// 得到文件名称
String fileName = request.getParameter("fileName");
// 得到请求地址
url  = new URL( request.getParameter("requestUrl"));// 建立链接
httpUrl = (HttpURLConnection) url.openConnection();
BufferedInputStream input = new BufferedInputStream(httpUrl.getInputStream());
response.setHeader("Content-Transfer-Encoding","binary"); 
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");  
response.setHeader("Pragma", "public"); 
// 设置下载文件头及文件名称
response.setHeader("Content-Disposition", "attachment; filename=" 
+ fileName);
ServletOutputStream responOutPut=response.getOutputStream();
byte[] buffer = new byte[1024*100];
int i = 0;
while ((i = input.read(buffer)) > 0) {
responOutPut.write(buffer, 0, i);
responOutPut.flush();
}
input.close();
responOutPut.close();

}catch(Exception e){
e.printStackTrace();
}
return null;
}


以上的代码


url是通过网络层接口的来的,视频文件是边生成边下载。服务器生成的速度的1s/10mb  输出流下载速度是1s/600kb  
为什么动态视频文件超过500MB通过输出流下载结束后会少掉十几MB  时间也缺少  但是可以正常播放

各位大声求解啊!!!!!!急急急急急  

8 个解决方案

#1


时间也少的话是不是视频缺少一段?

#2


是的啊  视频缺少一段  比如服务器生成的是500MB  那我下载下来的就是480MB   时间简短了  大小也变了

#3


是中间缺少帧还是后面一段时间直接没有了?也就是一部影片时间短了后,有没有结束?

#4


是缺少的最后一段 也就是一部影片时间短了后,他结束了

#5


说明不是丢包问题,而是没下载完?

你在response.setHeader里面设置length试试。length是影片的大小。

#6


*.*长度一样,无语了 求解

#7


<a title="md5在线解密加密" href=" http://md5.80p.cn/ " target="_blank">md5解密加密</a>

#8


楼主你在最后要flush下缓存,否则将会在缓存中留一块。

#1


时间也少的话是不是视频缺少一段?

#2


是的啊  视频缺少一段  比如服务器生成的是500MB  那我下载下来的就是480MB   时间简短了  大小也变了

#3


是中间缺少帧还是后面一段时间直接没有了?也就是一部影片时间短了后,有没有结束?

#4


是缺少的最后一段 也就是一部影片时间短了后,他结束了

#5


说明不是丢包问题,而是没下载完?

你在response.setHeader里面设置length试试。length是影片的大小。

#6


*.*长度一样,无语了 求解

#7


<a title="md5在线解密加密" href=" http://md5.80p.cn/ " target="_blank">md5解密加密</a>

#8


楼主你在最后要flush下缓存,否则将会在缓存中留一块。