怎么使用ByteArrayOutputStream下载文件
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,本篇内容主要讲解"怎么使用ByteArrayOutputStream下载文件",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么使用ByteArrayOut
千家信息网最后更新 2025年02月05日怎么使用ByteArrayOutputStream下载文件
本篇内容主要讲解"怎么使用ByteArrayOutputStream下载文件",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么使用ByteArrayOutputStream下载文件"吧!
使用ByteArrayOutputStream下载文件
//文件名称String filepath = ServletActionContext.getServletContext() .getRealPath(farmerQrCode.getQrCodeUrl()); File file = new File(filepath); String fileName = new Date().getTime()+".png";//设置请求信息 HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType(response.getContentType()); response.setHeader("Content-disposition", "attachment; filename="+fileName); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int len = 0; FileInputStream inputStream = new FileInputStream(file); byte [] buffer = new byte[3]; while((len = inputStream.read(buffer)) != -1) { baos.write(buffer, 0, len); } byte[] bytes = baos.toByteArray(); response.setHeader("Content-Length", String.valueOf(bytes.length)); BufferedOutputStream bos = null; bos = new BufferedOutputStream(response.getOutputStream()); bos.write(bytes); bos.close(); baos.close();
使用POI导出数据,然后将其下载
//此处将HSSFWorkbook wb处理好,然后最后要导出文件时加上此代码。ByteArrayOutputStream baos = new ByteArrayOutputStream(); response.setContentType(response.getContentType()); response.setHeader("Content-disposition", "attachment; filename=monthPayment.xls"); wb.write(baos); byte[] bytes = baos.toByteArray(); response.setHeader("Content-Length", String.valueOf(bytes.length)); BufferedOutputStream bos = null; bos = new BufferedOutputStream(response.getOutputStream()); bos.write(bytes); bos.close(); baos.close();
1、使用inputStream.read(buffer)方法分段的把txt文本中的内容写入buffer数组。
这里为buffer数组指定了长度为3,所以"hello world!"这组长度为11的数据会被分成4次写入到buffer数组中。
当inputStream.read(buffer)把数据都写入到buffer数组之后,它最后还会返回一次len为-1的值,代表数据完全读完。
2、使用outStream.write(buffer, 0, len)方法,在while循环体内把每次写入到buffer数组的值再次叠加写入到内存缓冲区中。
3、使用outStream.toByteArray()方法把内存缓冲区中的数据流转换成字节数组。
4、最后把字符数组转换成字符串进行返回return new String(data)。
使用ByteArrayOutputStream解决IO乱码问题
说下经过
今天在用s3接口做ceph储存的时候,要实现一个io下载的接口。
需要把InputStream转成byte[],一开始,是的写法是这样的:
byte[] buf = new byte[(int) fileSize]; InputStream in = ossObject.getObjectContent(); try { for (int n = 0; n != -1; ) { n = in.read(buf, 0, buf.length); } } catch (IOException e) { log.error(e.getMessage()); } finally { try { in.close(); } catch (IOException e) { log.error(e.getMessage()); } }
可是下载的文件稍大一些,就会出现乱码。
于是换了网上推荐的,使用byte缓存的方法,来实现InputStream转成byte[]:
private static byte[] inputToByte(InputStream inStream, int fileSize) throws IOException { ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); byte[] buff = new byte[fileSize]; int rc; while ((rc = inStream.read(buff, 0, fileSize)) > 0) { swapStream.write(buff, 0, rc); } return swapStream.toByteArray(); }
乱码的情况就解决了!
到此,相信大家对"怎么使用ByteArrayOutputStream下载文件"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
文件
数组
数据
方法
乱码
内容
内存
字符
接口
缓冲区
长度
学习
缓冲
实用
更深
代码
代表
信息
兴趣
再次
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
电脑二级数据库考试
侦察兵下载软件开发
甲骨文数据库下载
物联网跟软件开发什么专一好
数据库如何读取二次排序
db2命令行连接数据库
网瘾少年终成为网络安全专家
电信公司网络安全联席座谈会
苹果手机防止网络安全检查
信息网络技术员
英特尔处理器e5服务器
sql数据库客户端
保定长城汽车软件开发中心
广州天象网络技术有限公司cad
部队如何过好网络安全关
青岛直播软件开发中心
海拉尔极意网络技术有限公司
女生做个网络安全工程师
专业存储服务器
网络技术运维类专业知识
三级网络技术之前掌握什么
数据库图标变了
软件开发人才驻场价格
歌尔 软件开发工程师
ei数据库属于信息指南数据库
北京能通威科软件开发公司
福建福州软件开发招聘
桂林软件开发厂家价格
erp分销软件开发商
自觉筑牢网络安全坚固防线