背景介绍:
用Tomcat做服务器端写了一个servlet,从浏览器输入相应地址可以下载文件
我用Android写了一个有下载功能的客户端,有一个下载按钮
到目前为止,目的基本达到下载功能正常
问题:
下载小文件没有问题,但是如果用我写的安卓软件下载一个大一点的文件,比如说一个40M的视频文件,会出错,会出一连串的错!
首先,安卓下载出现java.lang.OutOfMemoryError错误,这个错误可以通过边传边写的方式去避免内存不足,但是出错后Tomcat打开的文件就不会去关闭了,这个怎么办??在实际项目中一个下载要考虑这些的吧。。。
还有,Tomcat给Android传输一个文件流,是不是和文本字符串一样一次性传过去的?参数传来传去比较好理解,不用考虑是否传完了,可是文件流,都说像水管的水一样传完之前源源不断。。。不太理解,希望能得到大牛指点迷津~~
------解决方案--------------------
tomcat配置一个虚拟路径,直接请求这个视频文件即可,不用java读取文件,关闭流。
------解决方案--------------------
tomcat做下载服务不是一个好的做法,建议用apache或nginx等web服务器;
网络传输中只有字节,所以下载的文件一般称之为字节流,你的问题解决:
1、http的header中域content-length,表明了请求或响应数据的长度;
2、如果响应的数据较大(例如:下载大文件),则http1.1后将使用chunked编码,chunked编码较复杂,不过网上文档较多,可以研读下;