java 逐行读写文件_用Java逐行读取和写入大文件的最快方法
小编典典
我怀疑您的真正问题是您的硬件有限,而您所做的只是软件不会带来太大变化。如果您有足够的内存和CPU,可以使用更高级的技巧,但是如果由于文件未缓存而仅在硬盘上等待,则不会有太大的不同。
BTW:10秒内500 MB或50 MB /秒是HDD的典型读取速度。
尝试运行以下命令以查看系统何时无法有效地缓存文件。
public static void main(String... args) throws IOException {
for (int mb : new int[]{50, 100, 250, 500, 1000, 2000})
testFileSize(mb);
}
private static void testFileSize(int mb) throws IOException {
File file = File.createTempFile("test", ".txt");
file.deleteOnExit();
char[] chars = new char[1024];
Arrays.fill(chars, 'A');
String longLine = new String(chars);
long start1 = System.nanoTime();
PrintWriter pw = new PrintWriter(new FileWriter(file));
for (int i = 0; i < mb * 1024; i++)
pw.println(longLine);
pw.close();
long time1 = System.nanoTime() - start1;
System.out.printf("Took %.3f seconds to write to a %d MB, file rate: %.1f MB/s%n",
time1 / 1e9, file.length() >> 20, file.length() * 1000.0 / time1);
long start2 = System.nanoTime();
BufferedReader br = new BufferedReader(new FileReader(file));
for (String line; (line = br.readLine()) != null; ) {
}
br.close();
long time2 = System.nanoTime() - start2;
System.out.printf("Took %.3f seconds to read to a %d MB file, rate: %.1f MB/s%n",
time2 / 1e9, file.length() >> 20, file.length() * 1000.0 / time2);
file.delete();
}
在具有大量内存的Linux机器上。
Took 0.395 seconds to write to a 50 MB, file rate: 133.0 MB/s
Took 0.375 seconds to read to a 50 MB file, rate: 140.0 MB/s
Took 0.669 seconds to write to a 100 MB, file rate: 156.9 MB/s
Took 0.569 seconds to read to a 100 MB file, rate: 184.6 MB/s
Took 1.585 seconds to write to a 250 MB, file rate: 165.5 MB/s
Took 1.274 seconds to read to a 250 MB file, rate: 206.0 MB/s
Took 2.513 seconds to write to a 500 MB, file rate: 208.8 MB/s
Took 2.332 seconds to read to a 500 MB file, rate: 225.1 MB/s
Took 5.094 seconds to write to a 1000 MB, file rate: 206.0 MB/s
Took 5.041 seconds to read to a 1000 MB file, rate: 208.2 MB/s
Took 11.509 seconds to write to a 2001 MB, file rate: 182.4 MB/s
Took 9.681 seconds to read to a 2001 MB file, rate: 216.8 MB/s
在具有大量内存的Windows计算机上。
Took 0.376 seconds to write to a 50 MB, file rate: 139.7 MB/s
Took 0.401 seconds to read to a 50 MB file, rate: 131.1 MB/s
Took 0.517 seconds to write to a 100 MB, file rate: 203.1 MB/s
Took 0.520 seconds to read to a 100 MB file, rate: 201.9 MB/s
Took 1.344 seconds to write to a 250 MB, file rate: 195.4 MB/s
Took 1.387 seconds to read to a 250 MB file, rate: 189.4 MB/s
Took 2.368 seconds to write to a 500 MB, file rate: 221.8 MB/s
Took 2.454 seconds to read to a 500 MB file, rate: 214.1 MB/s
Took 4.985 seconds to write to a 1001 MB, file rate: 210.7 MB/s
Took 5.132 seconds to read to a 1001 MB file, rate: 204.7 MB/s
Took 10.276 seconds to write to a 2003 MB, file rate: 204.5 MB/s
Took 9.964 seconds to read to a 2003 MB file, rate: 210.9 MB/s
2020-10-18
java 逐行读写文件_用Java逐行读取和写入大文件的最快方法相关推荐
- python入门文件读取与写入_初学者Python:读取和写入同一文件
每个打开的文件都有一个隐式指针,该指针指示将在何处读取和写入数据.通常,它默认为文件的开头,但是如果您使用a(追加)模式,则默认为文件的结尾.还值得注意的是,w即使您添加+到该模式,该模式也会截断您的 ...
- 手机访问电脑文件_彻底解决手机-电脑互传大文件的难题 电脑-手机快捷互联互通...
我们现在大多时候,手机和电脑传输数据都有用微信文件传输助手,或者QQ类型的功能.但是用这两个工具有2个问题,都是大于100M就不能传输了,而且传输图片的时候会进行压缩,即使你勾选了上传原图.所以我们需 ...
- php读取大文件某行内容,PHP读取和修改大文件的某行内容_PHP教程
最近碰到一个比较有趣的问题,就是修改某个文件的某一行字符,不过文件太大,file()直接读取是不可能的,我使用fgets来跳转到指定行,并用fwrite修改某个字符串: $fp = fopen(d:/ ...
- [转载] pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...
参考链接: 使用Pandas在Python中读写CSV文件 前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Pyth ...
- java : enum、创建文件和文件夹、删除文件和文件夹、获得项目绝对路径、写入数据到excel中、java代码中两种路径符号写法、读取、写入text文件...
java : enum http://www.cnblogs.com/hyl8218/p/5088287.html 创建文件和文件夹.删除文件和文件夹 http://www.cnblogs.com/m ...
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...
前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Python中读写CSV文件.有几种不同的方法,例如,您可以使用Py ...
- ftpclient怎么获取到该目录下面得文件_你应该知道的10种Python文件系统方法
使用os和shutil操作文件和文件夹 你可以编写Python程序来与文件系统进行交互来做很酷的事情.怎么做并不总是非常清楚.本文是当前和有抱负的开发人员和数据科学家的指南.我们将重点介绍10个基本的 ...
- linux中一切都是文件_在Linux中,“一切都是文件”是什么意思?
linux中一切都是文件 One of the defining features of Linux and other UNIX-like operating systems is that &qu ...
最新文章
- 【牛腩新闻发布系统】开始后端02
- dell服务器状态监控系统,Nagios监控Dell服务器硬件状态
- 朱毅麟:为什么用户接收机定位需要接收4颗导航卫星的信号?
- Matlab神经网络十讲(2): Create Configuration Train NeuralNet
- Android和IOS打开文档
- MDK linker和debug的设置以及在RAM中调试
- RabbitMQ入门教程——发布/订阅
- 知识图谱入门知识(一)知识图谱应用以及常用方法概述
- java 导入world数据_java读取world文件,把world文件中的内容,原样输出到页面上。...
- 角标越界 Java_【新人求助】利用占位符操作数据库是总是提示数组角标越界是怎么回事 - Java论坛 - 51CTO技术论坛_中国领先的IT技术社区...
- java9 多版本兼容jar_Java 9 多版本兼容 jar 包
- Genymotion安装那些事
- php pdo查询sqlserver,php pdo sqlserver分页sql的处理
- 项目管理软件浮出水面(转)
- 2017 上海车牌(沪牌)标书购买攻略
- 串口的原始模式和标准模式
- linux char大小,Linux基本数据类型大小——int,char,long int,long long int
- 电脑视频怎么录制?好用的电脑录屏方法
- CAD学习笔记中级课【导入导出】
- 软渲染器(Directx11)三之世界矩阵,相机变换矩阵,透视投影矩阵,透视除法,视口变换矩阵
热门文章
- 如何利用涂鸦免开发产品方案实现创意速搭
- java版溺尸哪里有_溺尸 - Minecraft Wiki
- wxid转微信号方式
- OpenCv--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
- 朴素贝叶斯分类-西瓜分类python
- 掌握Adobe InDesign ID 2020,打造多彩排版世界
- np.linspace() 函数用法
- database2sharp mysql_C# NetCore使用AngleSharp爬取周公解梦数据 MySql数据库的自动创建和页面数据抓取...
- 郭天祥十天入门单片机学习笔记
- RGB颜色查询对照表#FFFFFF