刚才自己做一个小例子,就是在android端点击一个button,然后从服务器端下载文件到手机SD卡。结果却遇到了问题,刚开始挺兴奋的,因为自己做的可以下载下来文件了,但是自习看才发现有问题,那就是下载到文件的大小却是0,导出后无法打开,搞不懂,然后不知道怎么搞的过了一会儿,文件大小自己又变化了,下载的一个txt的文件大小恢复正常,而下载的mp3文件却只有198K,如下图:

我的服务端代码如下图:

遇到这么奇葩的问题,我就开始想读取txt那个就成功了,为什么这个却失败了,看了看代码才知道,原来自己读取的方式不一样,在读取txt的时候代码如下;

1 protected voiddoGet(HttpServletRequest request,2 HttpServletResponse response) throwsServletException, IOException {3

4 String path = this.getServletContext().getRealPath("/download/pig.jpg");5 String filename = path.substring(path.lastIndexOf("\\") + 1);6

7 //这里如果把path.lastIndexOf("\\")中内容改为"/",则下载下来的文件名含有完整路径。8 //相当于直接设置为response.setHeader("content-disposition",9 //"attachment;filename="+ path);

10

11 InputStream in = null;12 OutputStream out = null;13

14 response.setHeader("content-disposition", "attachment;filename="

15 +filename);16

17 try{18 in = newFileInputStream(path);19

20 out =response.getOutputStream();21

22 int len = 0;23 byte buffer[] = new byte[1024];24 while ((len = in.read(buffer)) != 0) {25

26 out.write(buffer, 0, len);27 }28

29 } catch(Exception e) {30 //TODO: handle exception

31 } finally{32 try{33 in.close();34 out.close();35 } catch(Exception e) {36 //TODO Auto-generated catch block

37 e.printStackTrace();38 }39 }40

41 }

从上面大家可以看出二者的区别,那就是作为缓冲的byte数组的长度问题,一个是直接固定的1024大小,另一个是自己为了运用一种网上别人写代码的习惯尝试着直接判断流里数据的大小,由此来一次性的生成一个大小刚好的数组来存放数据,事实证明错误恰恰就出在此,按照读取txt文件的方式改变读取mp3文件的代码,发现程序运行正常了。

解释:

因为mp3文件不同于文本文件,MP3格式的歌曲完整的小的一般的也有2,3M大小,转换成字节B的话用来创建数组,值就显得比较大了。应该是在此处造成的内存问题导致出现了这种莫名其妙的错误。

因为自己也是刚学习Java不久,所以很多也只是猜测,没有去研究源码或者看更加深入的书,所以如果大家有什么更好的解释或者说更专业的解释,还望指点一二。让我也能解惑。谢谢啦。

java 文件 缓冲区大小_Java web 中文件下载遇到的缓冲大小问题相关推荐

  1. Java中用JS那些_java web中javascript主要用哪些?

    java web中javascript主要用途是在页面上完成特定按钮的事件功能并且实现前后台交互. JavaScript 是一种跨平台,面向对象的脚本语言.作为一种小巧且轻量级的语言,JavaScri ...

  2. java文件运行错误_java项目中运行错误

    展开全部 Java异常概念 1)Java异常是32313133353236313431303231363533e59b9ee7ad9431333363373666Java提供的用于处理程序错误的一种机 ...

  3. java 当中的验证码_Java Web中验证码的实现

    验证码本质上是一张图片,即应该用标签,其中src属性决定了这是一张什么图片,因此可以让src为某一Action,每次点击时,都会更新这个src属性. ① 前台JSP页面 My JSP 'imgcode ...

  4. java 高效文件批量下载_java实现高效文件下载

    java实现高效文件下载 本文我们介绍几种方法下载文件.从基本JAVA IO 到 NIO包,也介绍第三方库的一些方法,如Async Http Client 和 Apache Commons IO. 最 ...

  5. java 登录下线_java web中Listener的实现(实现用户在线统计数量和强制用户下线)...

    一.实现的具体功能 (1)实现用户在线数量的统计,并显示在页面上. (2)实现强制用户下线的功能.创建一个超链接,用于实现强制用户下线的功能. (3)监听session的创建和销毁. 二.代码实现 ( ...

  6. java web工程中如何添加图片_java web中如何添加图片

    java web中如何添加图片 对于java可视化界面插入背景图片只需要background-image:url(图片路径)就行,而对于web项目中,并非如此 效果如下: 我们就需要在jsp页面中写J ...

  7. java 问号乱码_Java web中常见编码乱码问题(一)

    最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...

  8. java入侵检测源码_Java Web中的入侵检测及简单实现

    作者:EasyJF开源团队 大峡 一.简介 在Java Web应用程中,特别是网站开发中,我们有时候需要为应用程序增加一个入侵检测程序来防止恶意刷新的功能,防止非法用户不断的往Web应用中重复发送数据 ...

  9. java文件路径转义_java文件路径中“\”和“/”的区别

    java文件路径中"\"和"/"的区别 发布时间:2020-06-25 17:51:22 来源:亿速云 阅读:189 作者:Leah 本篇文章为大家展示了jav ...

最新文章

  1. javascript的对象创建模式---命名空间模式
  2. React组件实现越级传递属性
  3. 【集合框架】JDK1.8源码分析HashSet LinkedHashSet(八)
  4. Vue + Spring Boot 项目实战(八):导航栏与图书页面设计
  5. 类似索引Model套Model之 iOS模型闲聊二
  6. 带你自学Python系列(三):列表遍历(for循环)
  7. springBoot(1)---简介与环境搭建
  8. 链表的实现 -- 数据结构与算法的javascript描述 第六章
  9. centos 7 安装韩文字体
  10. java 64位调用32位dll文件_64位进程调用32位dll的解决方法疑问
  11. 2020十大高薪资专业和十大高薪资岗位---(之我给程序员丢人了)
  12. Python学习心得
  13. linux rm 文件找回_Linux下用rm删除的文件的恢复方法
  14. 9.2-Scrapy框架爬虫【进阶】-spiders用法
  15. 转载!一文了解A股市场所有的ETF指数基金
  16. 四、异常(高琪java300集+java从入门到精通笔记)
  17. (01背包扩展) 算法提高 金明的预算方案
  18. 三菱转以太网模块连接 FX3U/3UC系列 PLC使用步骤
  19. 数字图像处理学习笔记(三)
  20. 论文阅读:Generating Abstractive Summaries with Finetuned Language Models

热门文章

  1. R语言构建仿真数据库(sqlite)并使用dplyr语法和SQL语法查询数据库、将dplyr语法查询语句翻译为SQL查询语句
  2. R语言ggplot2可视化分组散点图、使用scale_shape_manual函数、scale_color_manual函数、scale_size_manual函自定义设置分组散点的形状、大小、颜色
  3. R语言dplyr包的mutate函数将列添加到dataframe中或者修改现有的数据列:基于条件判断创建布尔型指示变量、将异常离散编码转化为NA值
  4. R语言生存分析寿命表(life table)实战案例:比较两种药物治疗感染患者的生存时间
  5. R语言aggregate函数数据聚合实战
  6. 机器学习特征工程之特征缩放+无量纲化:最大绝对值缩放(MaxAbsScaler)
  7. 深度学习时间序列预测:GRU算法构建多变量时间序列预测模型+代码实战
  8. java连接Orcale数据库并查询、插入、删除数据
  9. celldex包使用
  10. [Google API](3)创建搜索