每个域有固定长度,格式化写文本如下:
1xxxxxxx 2xxxxxxxxxxxxx 3xxxxxxxxxxx 4xxxxxxxxxx ...
1xxxxxxx 2xxxxxxxxxxxxx 3xxxxxxxxxxx 4xxxxxxxxxx ...
:
:比如1xxxxxxx域长度占60个字符,2xxxxxxxxxxxx占100个字符,等等,写50万条这样的记录,你如何提高性能?
1xxxxxxx 2xxxxxxxxxxxxx 3xxxxxxxxxxx 4xxxxxxxxxx ...
1xxxxxxx 2xxxxxxxxxxxxx 3xxxxxxxxxxx 4xxxxxxxxxx ...
:
:比如1xxxxxxx域长度占60个字符,2xxxxxxxxxxxx占100个字符,等等,写50万条这样的记录,你如何提高性能?
BufferedWriter out = new BufferedWriter(new FileWriter("filename", true));
out.write("aString");
// 这里继续写其它的。
out.close();
} catch (IOException e) {
}别人用这个写过数百M大小的文件,很快
我想问你一下,
1、你现在用什么方法实现的?
2、需要多长时间?
3、在现有基础上,你想缩短多少?
1. 格式化字段
2. 数据IO针对每个问题可以有不同的解决方案
1. 格式化
a)可用java直接Format方法
b)可用存储过程数据库生成好格式数据到临时表中,直接倒出(用主机能力)
c)如果主机性能OK,资源也够,可将数据库临时表放入内存, 降低物理IO, 也能加快生成效率
...
2. 数据IO
a)直接FileOutputStream写文件
b)使用StringBuffer,到了一定量再写
c)使用BufferWriter写
d)直接在主机上写完后,再一次性取出
...Java本身的IO主要是用JNI完成的,效率很高.以前偶写的倒出程序, 从数据库取出, java IO, 一般情况下, 普通PC上执行, 不会低于2000条/秒
其实没有最高效的算法,只有相对比较高效的。
在IO操作这块,我一直的经验是BufferedInputStream和BufferedOutputStream相对比较高。
昨天有人提出nio,我已经用实际代码证明了,nio的效率相比BufferedIO,并没有优势。
还有人提出 内存映射文件 ,我虽然没有实证,但是我相信效率应该跟BufferedIO没有大的差别。