读取文件后需要释放资源,对于占用内存比较大的,非常重要;

(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 语句,自动资源释放相关推荐

  1. 【java8新特性】——lambda表达式与函数式接口详解(一)

    一.简介 java8于2014年发布,相比于java7,java8新增了非常多的特性,如lambda表达式.函数式接口.方法引用.默认方法.新工具(编译工具).Stream API.Date Time ...

  2. Java8新特性总结 - 3. Lambda表达式

    所有示例代码打包下载 : 点击打开链接 Java8新特性 :  接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/ ...

  3. java stream byte_乐字节-Java8新特性之Stream流(上)

    上一篇文章,小乐给大家介绍了<Java8新特性之方法引用>,下面接下来小乐将会给大家介绍Java8新特性之Stream,称之为流,本篇文章为上半部分. 1.什么是流? Java Se中对于 ...

  4. java8新特性之lambda表达式--超级详细版本

    java8新特性之lambda表达式 1.什么是lambda表达式?为什么用它? 2. 为什么Java需要lambda表达式? 3. lambda表达式的语法 4.函数式接口 4.1 什么是函数式接口 ...

  5. 放大招了,肝了一篇8万字的Java8新特性总结,赶快收藏

    大家好,我是冰河~~ 说实话,肝这篇文章花了我一个月的时间,关于Java8的新特性全在这儿了,建议先收藏后阅读. Java8有哪些新特性? 简单来说,Java8新特性如下所示: Lambda表达式 函 ...

  6. Java8新特性之Lambda,呦呦呦

    Java8新特征之Lambda Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理.很多语言(Groovy.Scala等)从设计之初就支持Lambda ...

  7. Java8新特性 Lambda、Stream、Optional实现原理

    Java8新特性 Lambda.Stream.Optional实现原理 一.接口中默认方法修饰为普通方法 二.Lambda表达式 2.1.什么是Lambda表达式 2.2.为什么要使用Lambda表达 ...

  8. 零基础学习java------21---------动态代理,java8新特性(lambda, stream,DateApi)

    1. 动态代理 在一个方法前后加内容,最简单直观的方法就是直接在代码上加内容(如数据库中的事务),但这样写不够灵活,并且代码可维护性差,所以就需要引入动态代理 1.1 静态代理实现 在讲动态代理之前, ...

  9. java8新特性-lambda表达式入门学习

    定义 jdk8发布新特性中,lambda是一大亮点之一.lambda表达式能够简化我们对数据的操作,减少代码量,大大提升我们的开发效率.Lambda 表达式"(lambda expressi ...

最新文章

  1. Python设计模式-享元模式
  2. IIS 用户验证及授权
  3. 异常java.lang.Thread.dumpStack(Unknown Source)
  4. 同步和异步概念(由DZW前端框架引发的百度地图api无法加载问题总结)
  5. OpenResty安装下载
  6. Win7安装Mysql8.0步骤
  7. mysql命令分号_MySql常用命令:注意命令后面的分号!
  8. vue 点击图标 显示/隐藏 密码
  9. 阿里云游戏服务器攻击怎么防御?
  10. JS 下拉菜单内容交换
  11. 面试难题:本机号码一键登录原理,你知道吗?
  12. QT comboBox设置下拉菜单()
  13. DICOM:Transfer Syntax传输语义之奇葩GE Private TS
  14. Linux沙箱技术 - Setuid Sandbox
  15. CSDN开发者周刊第 21期:Wi-Fi 之父辞世,谷歌服务器再次全球宕机;Windows 10 将支持安卓应用
  16. 金蝶K3物料生效流程+物料批量导入功能开发
  17. 在javaScript中,变量名和函数名不能重名
  18. 自行火炮火控系统检测设备研制
  19. 下载python包的三种方式
  20. 个人创业道路上的感悟汇总,不得不经历的

热门文章

  1. 2021年大数据ELK(二十):FileBeat是如何工作的
  2. 2021年大数据HBase(九):Apache Phoenix的安装
  3. 2021年大数据HBase(八):Apache Phoenix的基本介绍
  4. Laravel和Thinkphp有什么区别,哪个框架好用
  5. adb.exe: more than one device/emulator
  6. python 把集合转成字典的方法
  7. Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(andro
  8. 微信小程序cover-view 与cover-image
  9. Binary XML file line #98: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lan
  10. Flutter 配置