Я должен получить 500K строк из базы данных и записать эти данные в файл, значит, выполнить операцию ввода-вывода - PullRequest
1 голос
/ 04 ноября 2011

Мне нужно извлечь 500К строк из базы данных и записать эти данные в файл. Средство выполняет операцию ввода-вывода.Я сделал для двух шагов.

  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));
        }

Ответы [ 3 ]

5 голосов
/ 04 ноября 2011

Посмотрите на BufferedOutputStream или BufferedWriter .

Также учтите, что 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);
}
2 голосов
/ 04 ноября 2011
0 голосов
/ 04 ноября 2011

Вы должны использовать библиотеку XML для создания XML. В противном случае вы не создадите действительный XML, и это будет ваша вина. Вы должны максимально использовать выходную буферизацию для ускорения процесса записи, однако я согласен с другими авторами, что вы, скорее всего, связаны с вводом в базе данных, а не с большими возможностями для улучшения вашего фактического кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...