java 处理大文件

article/2025/8/18 22:19:29

目的:

 前几天在开发过程中遇到一个需求: 读取一个大约5G的csv文件内容,将其转化为对象然后存储到redis中, 想着直接开大内存直接load 进入到内存中就行了,结果可想而知,5G的文件 ,Xmx 开到10G都没有解决,直接out of Memory  异常

1、读入大文件

  ①  直接load 进入到内存中


      这种处理大文件很容易造成 内存不够的问题

   String path = "F:\\originData\\snapshotDepth\\2022-06-20\\sh_stock_now.csv";File testFile = new File(path);List<String> file = FileUtil.readLines(testFile, Charset.defaultCharset());

     这种 500M的文件,堆内存一般会占用2.5G ,那么如果你去读一个5G的文件,那么内存直接起飞,所以这种不建议使用

 ②  按照行读取文件

  

     String path = "F:\\originData\\snapshotDepth\\2022-06-20\\sh_stock_now.csv";Scanner scanner = null;try (FileInputStream fileInputStream = new FileInputStream(path)) {scanner = new Scanner(fileInputStream);while (scanner.hasNextLine()) {String line = scanner.nextLine();log.info("对应的行的信息---{}", line);}} catch (Exception ex) {log.error("捕获到异常---{}", ex.getMessage(), ex);}

   这种因为是有按照一行行读取到内存当中,  所以耗时肯定增加 

③  使用common io 中的函数

 

   public void testCommon() {String path = "F:\\originData\\snapshotDepth\\2022-06-20\\sh_stock_now.csv";File file = new File(path);try {Integer count = 0;Long startTime = System.currentTimeMillis();final LineIterator lineIterator = FileUtils.lineIterator(file, "utf-8");while (lineIterator.hasNext()) {count++;String line = lineIterator.nextLine();if (count % 1000000 == 0) {Long stepTime = System.currentTimeMillis();log.info("读取100w 数据耗时为---{}", stepTime - startTime);startTime = stepTime;}}} catch (Exception ex) {log.error("读取文件异常---{}", ex.getMessage(), ex);}}

 运行结果:

 

 每100w行的数据 大概耗时为1.5秒, 这个是在我的笔记本上运行的结果,如果在性能更好的机器上速度应该更快。

2、写入文件

   log.info("开始对FileWriter 写入文件进行计时");Long startTime = System.currentTimeMillis();String path = "F:\\originData\\test.txt";String content = "12312313";for (int i = 0; i < 100000; i++) {try (FileWriter fileWriter = new FileWriter(path, true)) {fileWriter.append(content);} catch (Exception ex) {log.error("捕获到异常---{}", ex.getMessage(), ex);}}Long stepEnd = System.currentTimeMillis();log.info("FileWriter 耗时为----{}", stepEnd - startTime);String path2 = "F:\\originData\\test2.txt";log.info("开始对 BufferedWriter 写入文件进行计时");for (int i = 0; i < 100000; i++) {try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(path2, true))) {bufferedWriter.append(content);} catch (Exception ex) {log.error("捕获到异常---{}", ex.getMessage(), ex);}}Long stepNextEnd = System.currentTimeMillis();log.info("BufferedWriter 耗时为----{}", stepNextEnd - stepEnd);log.info("开始对 BufferedOutputStream  写入文件进行计时");String path3 = "F:\\originData\\test3.txt";for (int i = 0; i < 100000; i++) {try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(path3, true))) {bufferedOutputStream.write(content.getBytes());} catch (Exception ex) {log.error("捕获到异常---{}", ex.getMessage(), ex);}}Long stepNextStream = System.currentTimeMillis();log.info("BufferedWriter 耗时为----{}", stepNextStream - stepNextEnd);String path4 = "F:\\originData\\test4.txt";File file = new File(path4);try {if (!file.exists()) {file.createNewFile();}for (int i = 0; i < 100000; i++) {FileUtils.write(file, content, true);}log.info("FileUtils 耗时为----{}", System.currentTimeMillis() - stepNextStream);} catch (Exception ex) {log.error("捕获到异常---{}", ex.getMessage(), ex);}

运行结果

如果是写入字符串的话 还是建议使用BuffereOutputStream 


http://chatgpt.dhexx.cn/article/lWZwGrHs.shtml

相关文章

5、Linux:如何将大文件切割成多份小文件

最近&#xff0c;在做数据文件的导入操作时&#xff0c;发现有些文本文件太大了&#xff0c;需要将这样的大文件切分成多个小文件进行操作。那么&#xff0c;Linux 中如何将大文件切割成许多的小文件呢&#xff1f;在此记录一下。 Linux 提供了 split 命令可以轻松实现大文件的…

大文件传输有哪些方式可用?大文件传输有哪些方式?

大文件传输有哪些方式可用&#xff1f;大文件传输有哪些方式&#xff1f;互联网时代&#xff0c;速度决定效率。在企业生产过程中需要进行信息数据交换、搬运。这时就需要进行大文件传输。方方面面的行业都要涉及到大文件传输。例如影视行业需要每天进行视频素材的传输&#xf…

简道云-第5章-流程

title: 简道云-第5章-流程 date: 2022-06-13 22:21:29 tags: 简道云 categories: 简道云 简道云-第5章-流程 背景介绍 简道云三个基本项目表单、流程以及仪表。关于它们的介绍可以参照官方文档表单 vs 流程表单 vs 仪表盘。 「流程表单」&#xff1a;填报数据&#xff0c;并带…

阿里云【达摩院特别版·趣味视觉AI训练营】笔记2

阿里云【趣味视觉AI训练营】笔记2 一、笔记说明二、正文2.1 人体分割实验2.2 图像人脸融合实验 三、转载说明 一、笔记说明 本博客专栏《阿里云【达摩院特别版趣味视觉AI训练营】》的所有文章均为趣味视觉AI训练营的学习笔记&#xff0c;当前【达摩院特别版趣味视觉AI训练营】…

笔记本简单使用eNSP的云连接外网

文章目录 前言一、连接拓扑图二、配置cloud 三、配置pc测试是否能连接外网 前言 很多时候ping不通的原因不是网卡问题&#xff0c;而是配置没有设置好 一、连接拓扑图 二、配置cloud 绑定信息为UDP然后点击增加 绑定信息 笔记本电脑可以选择WiFi-ip&#xff0c;有本地连接可以…

头歌-信息安全技术-用Python实现自己的区块链、支持以太坊的云笔记服务器端开发、编写并测试用于保存云笔记的智能合约、支持以太坊的云笔记小程序开发基础

头歌-信息安全技术-用Python实现自己的区块链、支持以太坊的云笔记服务器端开发、编写并测试用于保存云笔记的智能合约、支持以太坊的云笔记小程序开发基础 一、用Python实现自己的区块链1、任务描述2、评测步骤(1)打开终端&#xff0c;输入两行代码即可评测通过 二、支持以太坊…

华为云HCS解决方案笔记HUAWEI CLOUD Stack【面试篇】

目录 HCS方案 一、定义 1、特点 2、优点 二、云服务 1、云管理 2、存储服务 3、网络服务 4、计算服务 5、安全服务 6、灾备服务 7、容器服务 三、应用场景 四、HCS功能层 五、OpenStack网络平面规划 六、ManageOne运维面 1、首页 2、集中监控 3、资源拓扑 …

关于玄武集团MOS云平台的使用笔记

对于该平台感兴趣的可以自己下载开发文档看一下&#xff0c;附上地址: https://download.csdn.net/download/qq_39380192/11182359 1、根据开发手册&#xff0c;MOS云平台给用户提供了关于各种通信服务的接口&#xff0c;用户可以通过调用相关的接口来实现一下几点功能&#x…

巧用git commit搭建云笔记+历史记录本

一、整理笔记的必要性 长期学习过程中&#xff0c;我发现人脑并不擅长记忆&#xff0c;它更擅长思考问题。程序员每天都要学习很多知识&#xff0c;学得快&#xff0c;忘得快很正常。很多东西并不需要记住&#xff0c;况且知识那么多&#xff0c;怎么可能全部记住&#xff1f;…

Aliyun 学习笔记(二)阿里云物联网平台介绍

文章目录 1 阿里云物联网平台1.1 设备接入1.2 设备管理1.3 安全能力1.4 规则引擎 1 阿里云物联网平台 根据阿里云物联网平台文档可以了解到所有有关阿里云物联网平台的介绍。 阿里云物联网平台为设备提供安全可靠的连接通信能力&#xff0c;向下连接海量设备&#xff0c;支撑…

《没道云笔记》开发手记

基本配置 Client&#xff1a;Android Servlet&#xff1a;SAE&#xff08;PHPMySQLStorage&#xff09; Period&#xff1a;2 weeks 项目分析 1.Model: Article.class{int id;String username;String title;String time;String content;} Bean.calss{int[] ids;String u…

《物联网 - 机智云开发笔记》第2章 设备驱动开发

开发板&#xff1a;GoKit3开发板&#xff08;STM32F103&#xff09; 在上一章节&#xff0c;笔者带领大家已经将机智云平台玩起来&#xff0c;本节内容讲带领大家经进一步开发。 在开始讲解之前&#xff0c;有必要先了解的机智云的平台架构。 从上面的架构图可以看到&#xf…

云笔记的使用感受和选择

市场上有很多文章针对云笔记的选择&#xff0c;但经过下载发现可能存在很多虚假广告【求生欲&#xff1a;其实可能是个人使用感受不佳仅表示个人观点】。 为什么选择云笔记 个人比较喜欢(❤ ω ❤)记录学习笔记和生活中的东西。之前选择有道云笔记&#xff0c;但因为最近打开…

基于分布式的云笔记实现(参考某道云笔记)

注&#xff1a; 1&#xff09;云笔记代码可在github上下载&#xff0c;如果对您有用&#xff0c;记得star一下。 2&#xff09;依赖jar包可在以下地址下载jar包&#xff0c;密码&#xff1a;yvkj&#xff0c;放到web/lib下即可 3&#xff09;hdfs配置参考网址 4&#xff09…

高软作业1:云笔记软件调研

写在前面&#xff1a; 选择云笔记作为这次调研对象&#xff0c;是因为看到一位同学作业里关于iOS场景下面的笔记软件对比。这一下子让我想起自己入坑过的各款云笔记应用&#xff0c;他们基本上都拥有云端存储和多端同步的功能&#xff0c;但同时又都存在着各自的优缺点。本来一…

华为云学习笔记(二)

物联网发展简史与概述 物联网大事件&#xff1a;NB-lot标准演进 NB-lot&#xff1a; 窄带物联网&#xff08;Narrow Band Internet of Things, NB-IoT&#xff09;成为万物互联网络的一个重要分支。NB-IoT构建于蜂窝网络&#xff0c;只消耗大约180kHz的带宽&#xff0c;可直接…

阿里云笔记2.0

【达摩院特别版趣味视觉AI训练营】 智能视觉开放平台> 目的&#xff1a;致力于更专业、全面、易用的视觉AI能力 图片4通道和3通道的对比成效 人体分割技术&#xff0c;适应复杂背景 即使人物处于复杂背景环境&#xff0c;依然可以将人体准确地从背景中分割出来。 阿里云…

SG90舵机的驱动

很多资料说SG90舵机是靠PWM控制的&#xff0c;其实不是&#xff0c;亲测该舵机是靠高电平的时间控制的&#xff0c;只是对周期有要求&#xff0c;需要是20ms以内&#xff0c;没错20ms的周期时间不是固定周期&#xff0c;而是最大周期。我尝试了3-20ms都可以控制。 高电平的时间…

STM32控制SG90舵机与超声波HC_SR04测距模块

目录 前言 1、项目简介 项目相关内容 2、模块 1、系统定时器SysTick 2、舵机模块SG90 3、 超声波模块 HC-SR04 4、Main.c 5、总结 前言 这篇文章主要是对自己学习STM32做的一个总结&#xff0c;利用超声波模块加舵机模块进行的小项目&#xff0c;为了方便知识的回顾&…

STM32F103单片机控制SG90舵机

前言 在智能衣柜系统中&#xff0c;试用SG90旋转0-180&#xff0c;模拟衣柜的开关门&#xff0c;舵机正转开门&#xff0c;180-0反转模拟一个关门的现象。 一&#xff0c;SG90舵机 1.1SG90链接&#xff1a; 【淘宝】https://m.tb.cn/h.UjfPasG?tk10CNdeeB4Il CZ0001 「SG9…