Java8 新的 try-with-resources 语句,自动资源释放
读取文件后需要释放资源,对于占用内存比较大的,非常重要;
(1)读取文件内存占用较多的优化方式: 一次读取部分处理完继续读取,可以有效的减少内存的占用;
使用RandomAccessFile可以从文件的任意位置读取,优势超级明显;
raf.seek(filePointer); 可以设置从文件的哪个指针位置读取,很方便高效;
(2)网络和带宽利用率不高的优化方式: 可以通过多线程发送请求更多的接口,或者增加每次接口请求的数据量,单个———>批量;
1. try-with-resources 读取完文件,自动资源释放
try (RandomAccessFile raf = new RandomAccessFile(filePath, "r");) {Image image = null;while((image = parseImage(raf)) != null){imageList.add(image);}return imageList;} catch(Exception e){log.error("parse file error, path: {},", path, e);return null;}
2. try catch finally 3件套,finnaly中关闭流
try {raf = new RandomAccessFile(filePath, "r");pgrLength = raf.length();
} catch (FileNotFoundException e) {e.printStackTrace();
} catch (IOException e) {e.printStackTrace();
} finally {// 关闭文件if (raf != null) {try {raf.close();} catch (IOException e) {log.error("file close error:", e);e.printStackTrace();}}
}
3. 读取文件时头上标识 注解
public static void customBufferStreamCopy(String[] args) throws Exception{@Cleanup InputStream in = new FileInputStream(args);@Cleanup OutputStream out = new FileOutputStream(args);byte[] buf = new byte[8192]; int i; while ((i = in.read(buf)) != -1) { out.write(buf, 0, i); }
}
参考:
– https://www.oschina.net/question/12_10706
Java8 新的 try-with-resources 语句,自动资源释放相关推荐
- 【java8新特性】——lambda表达式与函数式接口详解(一)
一.简介 java8于2014年发布,相比于java7,java8新增了非常多的特性,如lambda表达式.函数式接口.方法引用.默认方法.新工具(编译工具).Stream API.Date Time ...
- Java8新特性总结 - 3. Lambda表达式
所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/ ...
- java stream byte_乐字节-Java8新特性之Stream流(上)
上一篇文章,小乐给大家介绍了<Java8新特性之方法引用>,下面接下来小乐将会给大家介绍Java8新特性之Stream,称之为流,本篇文章为上半部分. 1.什么是流? Java Se中对于 ...
- java8新特性之lambda表达式--超级详细版本
java8新特性之lambda表达式 1.什么是lambda表达式?为什么用它? 2. 为什么Java需要lambda表达式? 3. lambda表达式的语法 4.函数式接口 4.1 什么是函数式接口 ...
- 放大招了,肝了一篇8万字的Java8新特性总结,赶快收藏
大家好,我是冰河~~ 说实话,肝这篇文章花了我一个月的时间,关于Java8的新特性全在这儿了,建议先收藏后阅读. Java8有哪些新特性? 简单来说,Java8新特性如下所示: Lambda表达式 函 ...
- Java8新特性之Lambda,呦呦呦
Java8新特征之Lambda Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理.很多语言(Groovy.Scala等)从设计之初就支持Lambda ...
- Java8新特性 Lambda、Stream、Optional实现原理
Java8新特性 Lambda.Stream.Optional实现原理 一.接口中默认方法修饰为普通方法 二.Lambda表达式 2.1.什么是Lambda表达式 2.2.为什么要使用Lambda表达 ...
- 零基础学习java------21---------动态代理,java8新特性(lambda, stream,DateApi)
1. 动态代理 在一个方法前后加内容,最简单直观的方法就是直接在代码上加内容(如数据库中的事务),但这样写不够灵活,并且代码可维护性差,所以就需要引入动态代理 1.1 静态代理实现 在讲动态代理之前, ...
- java8新特性-lambda表达式入门学习
定义 jdk8发布新特性中,lambda是一大亮点之一.lambda表达式能够简化我们对数据的操作,减少代码量,大大提升我们的开发效率.Lambda 表达式"(lambda expressi ...
最新文章
- Python设计模式-享元模式
- IIS 用户验证及授权
- 异常java.lang.Thread.dumpStack(Unknown Source)
- 同步和异步概念(由DZW前端框架引发的百度地图api无法加载问题总结)
- OpenResty安装下载
- Win7安装Mysql8.0步骤
- mysql命令分号_MySql常用命令:注意命令后面的分号!
- vue 点击图标 显示/隐藏 密码
- 阿里云游戏服务器攻击怎么防御?
- JS 下拉菜单内容交换
- 面试难题:本机号码一键登录原理,你知道吗?
- QT comboBox设置下拉菜单()
- DICOM:Transfer Syntax传输语义之奇葩GE Private TS
- Linux沙箱技术 - Setuid Sandbox
- CSDN开发者周刊第 21期:Wi-Fi 之父辞世,谷歌服务器再次全球宕机;Windows 10 将支持安卓应用
- 金蝶K3物料生效流程+物料批量导入功能开发
- 在javaScript中,变量名和函数名不能重名
- 自行火炮火控系统检测设备研制
- 下载python包的三种方式
- 个人创业道路上的感悟汇总,不得不经历的
热门文章
- 2021年大数据ELK(二十):FileBeat是如何工作的
- 2021年大数据HBase(九):Apache Phoenix的安装
- 2021年大数据HBase(八):Apache Phoenix的基本介绍
- Laravel和Thinkphp有什么区别,哪个框架好用
- adb.exe: more than one device/emulator
- python 把集合转成字典的方法
- Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(andro
- 微信小程序cover-view 与cover-image
- Binary XML file line #98: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lan
- Flutter 配置