我必须从数据库中获取500K行并将该数据写入文件,这意味着要执行I / O操作。我已经做了两个步骤。


将每一行一个接一个地写入文件。
制作这些行的大块。将这些行追加到StringBuffer中,然后打印出来。这会更好,但是有什么方法可以使File I / O自行使用而不使用StringBuffer来创建缓冲区。由于此String Buffer需要更多时间(内部使用Arrays.copyOf)


请给我建议
请找到与此所附的代码

public void fetchDataWithChunkSpace(Connection con)throws Exception
        {
            String query ="select * from lis.testxml  ";
            long startTime=new Date().getMinutes();
            PreparedStatement stmt = con.prepareStatement(query);
            ResultSet rs = stmt.executeQuery();
            PrintWriter pw = new PrintWriter(new File("c:\\test_chunkSpace.xml"));
            pw.write("<?xml version='1.0' encoding='UTF-8'?>");
            StringBuffer sb = new StringBuffer();
            String t=null;
            long count =0;
            while(rs.next())
            {   count++;
                t = rs.getString("xmltest");
                sb = sb.append(t);
                if(count%100==0)
                {
                 pw.write(sb.toString());
                 sb = new StringBuffer();
                 System.out.println(count);
                }
            }
            pw.write("\n");
            pw.write("</EndTag>");
            pw.close();
            stmt.close();
            con.close();
            long endTime=new Date().getMinutes();
            System.out.println("chunkSpace  ---> " + (endTime-startTime));
        }

最佳答案

查看BufferedOutputStreamBufferedWriter

还应考虑StringBuffer是与StringBuilder不同的具有同步方法的线程安全类。

更新。
试试这个代码:

Writer pw = new BufferedWriter(new PrintWriter(new File("c:\\test_chunkSpace.xml")));
pw.write("<?xml version='1.0' encoding='UTF-8'?>");
String t;
while (rs.next()) {
    t = rs.getString("xmltest");
    pw.write(t);
}

10-07 12:43
查看更多