首先,我从数据库获取数据时出现问题,它占用了太多内存并且失败了.我已经设置-Xmx1500M并且我正在使用滚动ResultSet以便处理.现在我需要从数据中创建一个XML,但我不能把它放在一个文件中.目前,我这样做:
while(rs.next()){
i++;
xmlStringBuilder.append("\n\t<row>");
xmlStringBuilder.append("\n\t\t<ID>" + Util.transformToHTML(rs.getInt("id")) + "</ID>");
xmlStringBuilder.append("\n\t\t<JED_ID>" + Util.transformToHTML(rs.getInt("jed_id")) + "</JED_ID>");
xmlStringBuilder.append("\n\t\t<IME_PJ>" + Util.transformToHTML(rs.getString("ime_pj")) + "</IME_PJ>");
//etc.
xmlStringBuilder.append("\n\t</row>");
if (i%100000 == 0){
//stores the data to a file with the name i.xml
storeKBR(xmlStringBuilder.toString(),i);
xmlStringBuilder= null;
xmlStringBuilder= new StringBuilder();
}
Run Code Online (Sandbox Code Playgroud)
它有效; 我得到12个100 MB的文件.现在,我想要做的是将所有数据放在一个文件中(我然后压缩),但如果只删除if部分,我就会耗尽内存.我想过尝试写一个文件,关闭它,然后打开,但这不会让我感觉太多,因为我打开它时必须将文件加载到内存中.
为什么不将所有数据写入一个文件并使用“追加”选项打开该文件?如果您只是要写入文件,则无需读取文件中的所有数据。
然而,这可能是一个更好的解决方案:
PrintWriter writer = new PrintWriter(new BufferedOutputStream(new FileOutputStream("data.xml")));
while(rs.next()){
i++;
writer.print("\n\t<row>");
writer.print("\n\t\t<ID>" + Util.transformToHTML(rs.getInt("id")) + "</ID>");
writer.print("\n\t\t<JED_ID>" + Util.transformToHTML(rs.getInt("jed_id")) + "</JED_ID>");
writer.print("\n\t\t<IME_PJ>" + Util.transformToHTML(rs.getString("ime_pj")) + "</IME_PJ>");
//...
writer.print("\n\t</row>");
}
writer.close();
Run Code Online (Sandbox Code Playgroud)
BufferedOutputStream 会在打印数据之前对其进行缓冲,如果默认值不符合您的需要,您可以在构造函数中指定缓冲区大小。有关详细信息,请参阅 java API:http://java.sun.com/javase/6/docs/api/。
| 归档时间: |
|
| 查看次数: |
603 次 |
| 最近记录: |