小编典典

我怀疑您的真正问题是您的硬件有限,而您所做的只是软件不会带来太大变化。如果您有足够的内存和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逐行读取和写入大文件的最快方法相关推荐

  1. python入门文件读取与写入_初学者Python:读取和写入同一文件

    每个打开的文件都有一个隐式指针,该指针指示将在何处读取和写入数据.通常,它默认为文件的开头,但是如果您使用a(追加)模式,则默认为文件的结尾.还值得注意的是,w即使您添加+到该模式,该模式也会截断您的 ...

  2. 手机访问电脑文件_彻底解决手机-电脑互传大文件的难题 电脑-手机快捷互联互通...

    我们现在大多时候,手机和电脑传输数据都有用微信文件传输助手,或者QQ类型的功能.但是用这两个工具有2个问题,都是大于100M就不能传输了,而且传输图片的时候会进行压缩,即使你勾选了上传原图.所以我们需 ...

  3. php读取大文件某行内容,PHP读取和修改大文件的某行内容_PHP教程

    最近碰到一个比较有趣的问题,就是修改某个文件的某一行字符,不过文件太大,file()直接读取是不可能的,我使用fgets来跳转到指定行,并用fwrite修改某个字符串: $fp = fopen(d:/ ...

  4. [转载] pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...

    参考链接: 使用Pandas在Python中读写CSV文件 前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Pyth ...

  5. java : enum、创建文件和文件夹、删除文件和文件夹、获得项目绝对路径、写入数据到excel中、java代码中两种路径符号写法、读取、写入text文件...

    java : enum http://www.cnblogs.com/hyl8218/p/5088287.html 创建文件和文件夹.删除文件和文件夹 http://www.cnblogs.com/m ...

  6. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  7. pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...

    前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Python中读写CSV文件.有几种不同的方法,例如,您可以使用Py ...

  8. ftpclient怎么获取到该目录下面得文件_你应该知道的10种Python文件系统方法

    使用os和shutil操作文件和文件夹 你可以编写Python程序来与文件系统进行交互来做很酷的事情.怎么做并不总是非常清楚.本文是当前和有抱负的开发人员和数据科学家的指南.我们将重点介绍10个基本的 ...

  9. linux中一切都是文件_在Linux中,“一切都是文件”是什么意思?

    linux中一切都是文件 One of the defining features of Linux and other UNIX-like operating systems is that &qu ...

最新文章

  1. 【牛腩新闻发布系统】开始后端02
  2. dell服务器状态监控系统,Nagios监控Dell服务器硬件状态
  3. 朱毅麟:为什么用户接收机定位需要接收4颗导航卫星的信号?
  4. Matlab神经网络十讲(2): Create Configuration Train NeuralNet
  5. Android和IOS打开文档
  6. MDK linker和debug的设置以及在RAM中调试
  7. RabbitMQ入门教程——发布/订阅
  8. 知识图谱入门知识(一)知识图谱应用以及常用方法概述
  9. java 导入world数据_java读取world文件,把world文件中的内容,原样输出到页面上。...
  10. 角标越界 Java_【新人求助】利用占位符操作数据库是总是提示数组角标越界是怎么回事 - Java论坛 - 51CTO技术论坛_中国领先的IT技术社区...
  11. java9 多版本兼容jar_Java 9 多版本兼容 jar 包
  12. Genymotion安装那些事
  13. php pdo查询sqlserver,php pdo sqlserver分页sql的处理
  14. 项目管理软件浮出水面(转)
  15. 2017 上海车牌(沪牌)标书购买攻略
  16. 串口的原始模式和标准模式
  17. linux char大小,Linux基本数据类型大小——int,char,long int,long long int
  18. 电脑视频怎么录制?好用的电脑录屏方法
  19. CAD学习笔记中级课【导入导出】
  20. 软渲染器(Directx11)三之世界矩阵,相机变换矩阵,透视投影矩阵,透视除法,视口变换矩阵

热门文章

  1. 如何利用涂鸦免开发产品方案实现创意速搭
  2. java版溺尸哪里有_溺尸 - Minecraft Wiki
  3. wxid转微信号方式
  4. OpenCv--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
  5. 朴素贝叶斯分类-西瓜分类python
  6. 掌握Adobe InDesign ID 2020,打造多彩排版世界
  7. np.linspace() 函数用法
  8. database2sharp mysql_C# NetCore使用AngleSharp爬取周公解梦数据 MySql数据库的自动创建和页面数据抓取...
  9. 郭天祥十天入门单片机学习笔记
  10. RGB颜色查询对照表#FFFFFF