2012-02-23 101 views
2

我需要阅读&从压缩文本文件中写入大量字符串(每个严格线90个字符长)。
还有耗时的任务,以准备输入/输出,但可以忽略不计(IO时间要大得多(异形))提高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

如果我正确读取了这段代码,那么您正在写入一个文件并读取* same *文件回来?或者我错了? – ArjunShankar 2012-02-23 11:09:30

+1

啊!你介于两者之间。你可能会分享更多的代码吗?可能会“暴露”加速的机会。 – ArjunShankar 2012-02-23 11:10:50

+1

你需要它快多少? – DNA 2012-02-23 11:13:09

回答

2

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

如果是这样,您可以一次读取这个大文件,并且可以基于这些行的第一个或第二个字符创建一到两个桶(文件)。之后,如果分配是统一的,那么您可以对这些存储桶进行排序(这些文件将小于1GB)。

具体它是这​​样的:

  • 打开大文件(10GB)
  • 开几十桶文件写(1为每个类型的线路:AA,AB,... )
  • 读取大文件的行,并写入文件斗
  • 关闭大文件
  • 关闭斗文件存储桶文件
  • 排序(第一AA,AB相比,...),这可以被并行化,并追加他们

一般来说,你应该增加读缓冲区(8K从一些兆字节)和写缓存(8K从256K到-512K)。