Java 提高IO性能和速度

Java 提高IO性能和速度,java,io,Java,Io,我需要从压缩文本文件读写大量字符串(每行90个字符长)。 准备输入/输出也很耗时,但可以忽略(IO时间要大得多(已分析)) 这是我正在使用的代码: GZIPOutputStream out = new GZIPOutputStream(new FileOutputStream(file)); out.write((stringData+NewLineConstant).getBytes()); GZIPInputStream in = new GZIPInputStream(new FileI

我需要从压缩文本文件读写大量字符串(每行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();
这个问题需要太多的时间才能完成

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


我能做些什么来显著提高性能吗?(无硬件更改)

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

如果是这样,您可以一次性读取这个大文件,并且您可以仅基于这些行的前一个或两个字符创建一个或二十多个bucket(文件)。之后,如果分布是一致的,您可以在内存中对这些存储桶进行排序(这些文件将小于1GB)

具体来说,它是这样的:

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

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

如果我正确读取了此代码,您是在写入文件并将相同的文件读回?还是我错了?啊!你介于两者之间。你能分享更多的代码吗?可能会“暴露”加速的机会。您需要快多少?为什么不使用
BufferedWriter
,调用
newLine()
并删除该
NewLineConstant
?您甚至可以重用char[90]缓冲区来调用
write
。哪一行最耗时(基于您的评测)?