每个域有固定长度,格式化写文本如下:
1xxxxxxx           2xxxxxxxxxxxxx         3xxxxxxxxxxx            4xxxxxxxxxx  ...
1xxxxxxx           2xxxxxxxxxxxxx         3xxxxxxxxxxx            4xxxxxxxxxx  ...
:
:比如1xxxxxxx域长度占60个字符,2xxxxxxxxxxxx占100个字符,等等,写50万条这样的记录,你如何提高性能?

解决方案 »

  1.   

    大概用bufferedOutputStream吧,尽量一次io多输出一些数据。
      

  2.   

    try {
            BufferedWriter out = new BufferedWriter(new FileWriter("filename", true));
            out.write("aString");
     
           // 这里继续写其它的。
     
            out.close();
        } catch (IOException e) {
        }别人用这个写过数百M大小的文件,很快
      

  3.   

    tinwoo (稻草人) :
    我想问你一下,
    1、你现在用什么方法实现的?
    2、需要多长时间?
    3、在现有基础上,你想缩短多少?
      

  4.   

    需要找到你效率需要注意的地方, 如
    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条/秒
      

  5.   

    上楼:
    其实没有最高效的算法,只有相对比较高效的。
    在IO操作这块,我一直的经验是BufferedInputStream和BufferedOutputStream相对比较高。
    昨天有人提出nio,我已经用实际代码证明了,nio的效率相比BufferedIO,并没有优势。
    还有人提出 内存映射文件 ,我虽然没有实证,但是我相信效率应该跟BufferedIO没有大的差别。