【优雅编程之道】之IO流,序列化的4点建议
开心一笑
【妈妈:“宝宝,你已经四岁了,你可以自己睡了。”
孩子:“爸爸都那么大了,为什么不自己睡?”】
视频教程
大家好,我录制的视频《Java之优雅编程之道》已经在CSDN学院发布了,有兴趣的同学可以购买观看,相信大家一定会收获到很多知识的。谢谢大家的支持……
视频地址:http://edu.csdn.net/lecturer/994
提出问题
项目中IO流,序列化需要注意的几点???
解决问题
前言
在工作中,写IO流的代码比较少,一般是在文件上传,下载,excel文件导入导出等等才会使用到。但是一旦系统在IO流出现问题,后果是不堪设想的,可能会造成整个系统直接挂掉。因此,写好IO流,序列号和反序列话就显的尤为重要。
1.序列化类新增属性时,请不要修改serialVersionUID字段避免反序列失败
2.及时关闭流,先开后关,后开先关
我们在io操作完成后,需要及时关闭流释放资源,因为这样的对象不主动关闭,将会占用系统资源,会增大系统的开销。
@Override
public void downloadAttachment(SysAttachment sysAttachment, HttpServletRequest request, HttpServletResponse response) throws Exception {//sysAttachmentService.download(attachmentId,request,response);String fileName = sysAttachment.getName() + "." + sysAttachment.getType();String dfileName = new String(fileName.getBytes("gb2312"), "iso8859-1");String fullPath = sysAttachment.getPath();//先开后关OutputStream out = response.getOutputStream();File file = new File(fullPath);if (file.exists()) {if(sysAttachment.getSubModule().equals("android")){response.setContentType("application/vnd.androi3d.package-archive");}else {response.setContentType("APPLICATION/OCTET-STREAM");}response.addHeader("Content-Disposition", "attachment;filename=" + dfileName);//后开先关FileInputStream in = null;try {out = response.getOutputStream();in = new FileInputStream(fullPath);byte[] b = new byte[1024];int i = 0;while ((i = in.read(b)) > 0) {out.write(b, 0, i);}out.flush();} finally {if (in != null) {in.close();in = null;}if (out != null) {try {out.close();} catch (IOException e) {logger.error(e.getMessage(), e);}out = null;response.flushBuffer();}}} else {throw new ResourceNotFoundException("文件: \"" + fileName + "\"不存在!");}
3.文件中的分隔符使用类中常量
在window和linux中的分隔符等可能会不同,使用类中的分割常量将会根据系统自动生成。如File.pathSeparator、File.separator等
4.尽量使用缓存流
在软件系统中,IO速度比内存速度慢,IO读写在很多情况下会是系统的瓶颈。
在java标准IO操作中,InputStream和OutputStream提供基于流的IO操作,以字节为处理单位;Reader和Writer实现了Buffered缓存,以字符为处理单位。
从Java1.4开始,增加NIO(New IO),增加缓存Buffer和通道Channel,以块为处理单位,是双向通道(可读可写,类似RandomAccessFile),支持锁和内存映射文件访问接口,大大提升了IO速度。
java缓冲流本身不具IO功能,只是在别的流上加上缓冲提高效率,像是为别的流装上一种包装。当对文件或其他目标频繁读写或操作效率低,效能差。这时使用缓冲流能够更高效的读写信息。因为缓冲流先将数据缓存起来,然后一起写入或读取出来。所以说,缓冲流还是很重要的,在IO操作时记得加上缓冲流提升性能。
缓冲流分为字节和字符缓冲流
- 字节缓冲流为:
BufferedInputStream—字节输入缓冲流
BufferedOutputStream—字节输出缓冲流
- 字符缓冲流为:
BufferedReader—字符输入缓冲流
BufferedWriter—字符输出缓冲流
下面主要介绍这四种缓冲流的使用。
一. 字节缓冲流
1.BufferedOutputStream—字节输出缓冲流
BufferedOutputStream类实现缓冲的输出了,通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必每一个字节写入都调用底层系统。
示例代码:
public static void main(String[] args) { try { //创建字节输出流实例 OutputStream out=new FileOutputStream("L:\\test.txt"); //根据字节输出流构建字节缓冲流 BufferedOutputStream buf=new BufferedOutputStream(out); String data="好好学习,天天向上"; buf.write(data.getBytes());//写入缓冲区 buf.flush();//刷新缓冲区,即把内容写入 //关闭流 buf.close();//关闭缓冲流时,也会刷新一次缓冲区 out.close(); } catch (IOException e) { e.printStackTrace(); }
}
结束语
IO流 和 序列化反序列化的课程,我们今天就讲到这里。跟多深入的知识,大家可以查阅书籍等资料去学习。
读书感悟
来自七堇年《被窝是青春的坟墓》
- 被窝是青春的坟墓。
- 我生命中的温暖就那么多,全部给了你,叫我以后怎么再对别人微笑。
- 我们要有最朴素的生活,与最遥远的梦想 。即使明日天寒地冻,路远马亡。
- 生命若给我无数张脸,我永远选择最疼痛的一张去触摸。
- 我知道有些人是无法忘记的,即使在你成长之初他们就已经消失。但是他们被镌刻在你的生命线上,无法磨灭。让我们终其一生为了这些印记做两件事情:怀念,或者寻找。
- 无奈的是,语言这东西,在表达爱意的时候如此无力;在表达伤害的时候,却又如此锋利。
- 寂寞,就是你有话说的时候没人听,有人听的时候你却无话可说。
经典故事
【有一个欧巴桑在首饰店里看到二只一模一样的手环。
一个标价五百五十元,另一个却只标价二百五十元。
她大为心喜,立刻买下二百五十元的手环,得意洋洋的走出店门。
临出去前,听到里面的店员悄悄对另一个店员说:「看吧,这一招屡试不爽。
(学习啦:试探如饵,可以轻而易举的使许多人显露出贪婪的本性,然而那常常是吃亏受骗的开始。)】
大神文章
无
其他
如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!
【优雅编程之道】之IO流,序列化的4点建议相关推荐
- 【优雅编程之道】之注释的9点建议
开心一笑 [今天朋友当着我们的面甩一张卡给他媳妇,说随便刷,我们心想他何时变得这么man,只见他媳妇甩起卡就往他脸上扔,说:"有脾气给信用卡,给我什么公交卡".我们在一旁笑爆了!神 ...
- 【优雅编程之道】之数组的7点建议
开心一笑 [小明喜欢上一个刚来的女同事,她是医院里的检验师,为了套近乎就经常跑到她科室去倒开水喝,熟了后就发现她随身的小包包里总放着一把小水果刀,于是我问她:你总放把小刀包里干嘛?她答道:下夜班防身啊 ...
- 【优雅编程之道】之方法的9点建议
开心一笑 [一个去看演出的朋友回来了. 我问他:"怎么样演出好看吗?" 朋友:"人太多了,我去晚了,在后面什么也看不见,只能跳起来看几眼, 后来跳累了就不看了,也没有什么 ...
- 【优雅编程之道】之集合的8点建议
开心一笑 [一带孩的妈说,她最喜欢的状态是: 枯藤老树昏鸦,空调WiFi西瓜. 葛优同款沙发.夕阳西下,我就往那一趴!一趴!一趴!谁也别叫我! 最不想听到有人叫我"妈--"] 视频 ...
- 【优雅编程之道】之异常的6点建议
开心一笑 [想来想去,还是努力挣钱更靠谱,不然心情不好时,只能买两瓶啤酒医一袋鸡爪在路边嗷嗷的哭,努力挣钱的话,就能躺在幽美的山中温泉里敷面膜止住眼泪.努力挣钱我还可以去纽约哭,去伦敦哭,去巴黎哭,去 ...
- Java编程基础:学习IO流
IO流 1.主要内容 java.io.File类的使用:计算机操作系统的文件和文件夹 IO原理及流的分类 文件流:数据流的读写都是基于文件的操作 FileInputStream FileOutputS ...
- IO流 序列化反序列化 Properties 缓冲流 字节流 字符流
package com.llb.io;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundE ...
- 优雅编程之阿里巴巴开发规范分享及扩展学习(三十八)
开心一笑 [小明的前女友开了家小宾馆,小明进去吃碗牛肉面,吃完就付钱,她前女友说什么都不肯收,于是小明把钱放在桌子上就走了,没想到她前女友追出来把钱塞给了小明.小明就跟他说:"做生意不容易啊 ...
- 优雅编程之这样使用枚举和注解,你就“正常”了(二十九)
开心一笑 视频教程 大家好,我录制的视频<Java之优雅编程之道>已经在CSDN学院发布了,有兴趣的同学可以购买观看,相信大家一定会收获到很多知识的.谢谢大家的支持-- 视频地址:http ...
- 优雅编程之这样重构函数(续),你就“正常”了(二十)
开心一笑 [唐僧4人西天取经.,一天,一位女施主缠着唐僧.唐山对孙悟空说:悟空啊,帮我鉴定一下,是人是妖.孙悟空用火眼金睛一照.回头对唐僧说:师傅,鉴定完毕,是人妖,是人妖--] 视频教程 大家好,我 ...
最新文章
- Linux C编程一站式学习读书笔记——socket编程
- norm--求矩阵和向量的范数
- android.mk编译动态库,安卓之Android.mk多文件以及动态库编译
- Struts2中 Path (getContextPath与basePath)
- MUI调用原生自定义方法实现计算缓存与清空缓存
- Sophos 修复 Cyberoam OS 中的 SQL 注入漏洞
- Redis之Redis事务
- 2.4.5 数据框(data frame)的建立
- Oracle系列--基础理论
- 学习getRequestDispatcher()与sendRedirect()笔记
- Latex 语法总结(持续更新)
- adb命令——简单常用命令介绍:截图——adb shell screencap -p /sdcard/123.png...
- GPS卫星星历与卫星历书的区别
- a5解锁 oppo_oppoa5忘记密码了怎么强制解锁
- Spark从SQL的解析、执行与调优到Sparksql的解析的史上最全介绍
- cdr 表格自动填充文字_极速office中表格的七个最常用技巧
- AttributeError: module ‘scipy.signal‘ has no attribute ‘correlation_lags‘
- 实时操作系统概述(推荐) .
- 静态网页和动态网页-个人学习理解
- JAVA中webSockt一对一聊天