我必须从数据库中获取500K行并将该数据写入文件中,Means执行I/O操作

gau*_*rav 1 java performance file-io

我必须从数据库中获取500K行并将该数据写入文件中,Means执行I/O操作.我已经完成了两个步骤.

  1. 将每一行逐个写入文件.
  2. 制作那些行的块.在StringBuffer中添加这些行然后打印它们.这个会更好但是有没有什么方法可以让File I/O自己创建缓冲区而不使用StringBuffer.因为这个字符串缓冲区需要更多时间(内部使用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));
        }
Run Code Online (Sandbox Code Playgroud)

sva*_*aor 5

查看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);
}
Run Code Online (Sandbox Code Playgroud)