通过网站将大量数据导出为XML
来源:互联网 发布:八字排盘反推软件 编辑:程序博客网 时间:2024/06/08 04:01
要从根本上解决这个问题,就要想办法降低内存的占用。显然这个方案中有两处占用了大量内存,一是将表中的数据全部读出保存于内存之中;二是在内存中将XML组织完整以后才向客户端输出。第一点很容易解决,采取每次读取一批数据分多次读取即可解决,而第二点,可以通过Java的stax解决。
以下是一段实现将大量数据形成XML文件并发送到客户端浏览器下载的例程,为了简明起见,数据是直接通过代码生成的而不是从数据库中读取的。该代码生成的XML约1G大小,经测试,未再发生内存溢出的错误。
package net.yanzhijun.edu;
import java.io.IOException;
import java.io.OutputStreamWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
/**
* Servlet implementation class ExportXml
*/
public class ExportXml extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public ExportXml() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
sample(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
sample(request, response);
}
private void sample(HttpServletRequest request, HttpServletResponse response)
{
response.setContentType(“application/octet-stream”);
response.setHeader(“Content-Disposition”, “attachment; filename=\”sample.xml\”;”);
response.setHeader(“Content-Transfer-Encoding”,”binary”);
response.setHeader(“Cache-Control”, “must-revalidate, post-check=0, pre-check=0″);
response.setHeader(“Pragma”, “public”);
try
{
XMLOutputFactory outputFactory=XMLOutputFactory.newInstance();
OutputStreamWriter output = new OutputStreamWriter(response.getOutputStream(), “UTF-8″);
XMLStreamWriter xml=outputFactory.createXMLStreamWriter(output);
xml.writeStartDocument(“UTF-8″, “1.0″);
// 根结点
xml.writeStartElement(“root”);
for(int i = 1; i < 10000000; i++)
{
//子结点开始
xml.writeStartElement(“list”);
xml.writeAttribute(“id”, “ID” + i);
xml.writeAttribute(“attr1″, “ATTR1_” + i);
xml.writeAttribute(“attr2″, “ATTR2_” + i);
xml.writeAttribute(“attr3″, “ATTR3_” + i);
xml.writeAttribute(“attr4″, “ATTR4_” + i);
// 子结点结束
xml.writeEndElement();
}
// 根结点结束
xml.writeEndElement();
xml.flush();
xml.close();
}
catch(IOException e)
{
e.printStackTrace();
}
catch( XMLStreamException e)
{
e.printStackTrace();
}
}
}
欢迎访问梦断酒醒的博客http://www.yanzhijun.net
- 通过网站将大量数据导出为XML
- 将数据库中的数据导出为XML数据
- PHP 将大量数据导出到 Excel 的方法
- PHP 将大量数据导出到 Excel 的方法
- PHP 将大量数据导出到 Excel 的问题
- 通过模板将GridView导出为Excel
- 将GridView导出为PDF 通过itextsharp
- 将GridView导出为PDF 通过itextsharp
- 将GridView导出为PDF 通过itextsharp
- RSS阅读器制作之将TreeView数据导出为XML数据
- 大量数据导出为Excel文件的问题解决
- BIEE导出大量数据为excel时报错
- CSV导出大量数据
- 将DataTable导出为Excel (XML Spreadsheet).
- 将DataTable导出为Excel (XML Spreadsheet)
- 将DataTable导出为Excel (XML Spreadsheet)
- 将DataTable导出为Excel (XML Spreadsheet).
- 将数据转化为xml
- (个人笔记)au3 入门
- XML schema与xml dtd文件相比较的优点
- 高效的最大公约数算法
- 拥有这10个条件 让你成为优秀美工(网页设计师)
- ubuntu 12.04 开机自动挂载windows分区
- 通过网站将大量数据导出为XML
- 流编辑器sed
- win32项目、windows窗体应用程序、MFC区别
- 【水】【动态规划】香穗子系列解题报告
- pythonRiddle谜题Level0-5
- 精通Hibernate---------读书笔记对象关系映射基础
- 设置文件属性命令chattr与lsattr
- oj 中G++和C++区别
- 职场人生(十):准备GCT,向研究生看齐