提高IO性能和速度

时间:2012-02-23 11:03:39

标签: java io

我需要阅读&从/到压缩文本文件写入大量的字符串(每个条纹线90个字符长) 准备输入/输出也有耗时的任务,但可以忽略不计(IO时间要大得多(配置文件))

这是我正在使用的代码:

GZIPOutputStream out = new GZIPOutputStream(new FileOutputStream(file));
out.write((stringData+NewLineConstant).getBytes());

GZIPInputStream in = new GZIPInputStream(new FileInputStream(file));
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in),8192);
String data = bufferedReader.readLine();

问题需要花费太多时间才能完成。

这也是在用于对数据进行排序的多个文件(合并排序)上完成的。

我能做些什么来显着改善表现? (没有硬件更改)

1 个答案:

答案 0 :(得分:2)

您是否有关于这些行中前一个或两个字符分布的任何信息?

如果是这样,你可以一次读取这个大文件,你可以只根据这些行的前一个或两个字符创建一个或两个桶(文件)。之后,如果分布均匀,您可以在内存中对这些存储桶进行排序(这些文件小于1GB)。

详细说明如下:

  • 打开大文件(10GB)
  • 打开几十个要写的桶文件(每种类型的1行:aa,ab,...)
  • 读取大文件的行,并写入存储桶文件
  • 关闭大文件
  • 关闭存储分区文件
  • 对内存中的存储桶文件进行排序(首先是aa,而不是ab,...),这可以并行化,并附加它们

通常,您应该增加读取缓冲区(从8K到几兆字节)和写入缓冲区(从8K到256K-512K)。