最后一句梁友态有点不明白,为什么用BufferedInputStream?这个是读文件的,不知道你后面是如何写的,难道还要把文件读到内存?在向客户端发送出去告孝??这样的话下载GB级文件内存溢出。
BufferedInputStream和BufferedOutputStream 用橡源了之后,一定要flush(),这样也许会解决你的中文下载报错。
我直接用BufferedOutputStream 下载文件成功,前面是用你的,后面如下:
InputStream in = new FileInputStream(file)// 将文件装换成缓冲流
OutputStream out = response.getOutputStream()// 获取response中得下载对象
BufferedOutputStream bufo = new BufferedOutputStream(out)// 对象转换成字符流
int length = 0 // 读取本地文时,记录本次文件读取内容大小
byte[] buffer = new byte[524288]// 每次推送 512KB
while ((length = in.read(buffer)) != -1) // 读取本地文件,并在存放在buffer 数组
{
bufo.write(buffer, 0, length)// 预备向客户端推送
bufo.flush()// 清空缓存,并立即推送
}
in.close()
out.close()
bufo.close()
不建议写 response.setContentLength(int)大并发时,这个容易出问题。
ISO8859-1是页面上数据传输的格式,new String(fileName.getBytes("gb2312"),"iso8859-1")
gb2312是你java项目格式(根据实际项目变更),目的是为了将中漏闹兆文返租文件名正确显示在页面上弯拿。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)