gpt4 book ai didi

java - 有没有办法优化我生成文件并将其输出为 .zip 在 java servlet 中的方式?

转载 作者:行者123 更新时间:2023-11-29 04:01:02 24 4
gpt4 key购买 nike

用户在 JSP 页面上有几个查找选择。在他选择了他想要导出的数据之后,JSP 调用我的 servlet,它应该做这样的事情:

  1. 获取请求数据
  2. 为请求数据生成SQL
  3. 执行SQL并将其写入XML文件
  4. 将XML文件打包成ZIP文件并作为响应返回

现在,前两点是微不足道的,但后两点是我不确定的:

 //3. execute the SQL and write it to a XML file
ConnectionManager cm = new ConnectionManager();
Connection conn = null;
ResultSet rs = null;
Statement stmt = null;

try {
conn =cm.getConnection();
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sqlQuery);
// generates XML and writes it to a java.io.Writer
OutputStreamWriter writer = new OutputStreamWriter( new FileOutputStream(Konstante.zipFolder + idVrsteSifarnika+ ".xml"), "UTF8");
XMLWriter.writeXMLToWriter(rs,writer);
} catch (Exception ex) {
logger.error(ex);
} finally {
ConnectionManager.close(rs, stmt, conn);
}

//4. package the XML file to a ZIP file and return it as a response
ZipEntry ze = new ZipEntry(idVrsteSifarnika + ".xml");
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
ZipOutputStream zos = new ZipOutputStream(bos);
zos.putNextEntry(ze);
FileInputStream fis = new FileInputStream(new File(Konstante.zipFolder + idVrsteSifarnika+ ".xml"));
final byte[] buffer = new byte[1024];
int n;
while ((n = fis.read(buffer)) != -1)
zos.write(buffer, 0, n);
zos.closeEntry();
zos.flush();
zos.close();
fis.close();
bos.close();

我想知道的是,是否可以通过改变我做这一切的方式/改变各种流来优化内存使用/执行速度?

附言这是 writeXMLToWriter 方法

//Set up XML
DataWriter w = new DataWriter(writer);
w.startDocument();
w.setIndentStep(2);
w.startElement(startingXMLElement);
// Get the metadata
ResultSetMetaData meta = rs.getMetaData();
int count = meta.getColumnCount();
// Iterate over the set
while (rs.next()) {
w.startElement(rowElement);
for (int i = 0; i < count; i++) {
Object ob = rs.getObject(i + 1);
if (rs.wasNull()) {
ob = null;
}
String colName = meta.getColumnLabel(i + 1);
if (ob != null ) {
if (ob instanceof Timestamp) {
w.dataElement(colName, Util.formatDate((Timestamp)ob, dateFormat));
}
else if (ob instanceof BigDecimal){
w.dataElement(colName, Util.transformToHTML(new Integer(((BigDecimal)ob).intValue())));
}
else {
w.dataElement(colName, ob.toString());
}

} else {
w.emptyElement(colName);
}
}
w.endElement(rowElement);
}
w.endElement(startingXMLElement);
w.endDocument();

最佳答案

根本不需要将 XML 写入磁盘。只需创建一个 OutputStreamWriter 包装 ZipOutputStream 并将其传递给您的 writeXMLToWriter 方法:

ZipOutputStream zos = new ZipOutputStream(bos);
zos.putNextEntry(ze);
OutputStreamWriter writer = new OutputStreamWriter(zos, "UTF-8");
XMLWriter.writeXMLToWriter(rs,writer);
writer.close();
zos.closeEntry();
zos.flush();

关于java - 有没有办法优化我生成文件并将其输出为 .zip 在 java servlet 中的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3627118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com