Freemarker输出字符串而不是文件

    Freemarker一般是通过writer输出到文件的处理过程,但是这个过程不是很优化的,大量的IO操作使程序变的很慢。尤其是生成对应的文件后,再做一些处理,更是慢上加慢。

    废话少说,先看看改造前的代码。

cfg.setClassForTemplateLoading(this.getClass(), "/");
cfg.setObjectWrapper(new DefaultObjectWrapper());
cfg.setNumberFormat("################");

Questionnaire questionnaire = questionnaireDAO.findById(input.getDialogId());
Map root = new HashMap();
root.put("questionnaire", questionnaire);

Template template = cfg.getTemplate("soapRequest.ftl");
OutputStream os = conn.getOutputStream();
Writer out = new BufferedWriter(new OutputStreamWriter(os, "utf-8"));
template.process(root, out);
out.flush();
out.close();

 修改后的。

cfg.setClassForTemplateLoading(this.getClass(), "/");
cfg.setObjectWrapper(new DefaultObjectWrapper());
cfg.setNumberFormat("################");

Questionnaire questionnaire = questionnaireDAO.findById(input.getDialogId());
Map root = new HashMap();
root.put("questionnaire", questionnaire);
/**
* StringWriter instead of Writer
* Class StringWriter contains a StringBuffer which can be rendered toString
* modify by heweiya
*/
StringWriter stringWriter = new StringWriter();
BufferedWriter writer = new BufferedWriter(stringWriter);
template.setEncoding("UTF-8");
template.process(root, writer);
StringReader reader = new StringReader(stringWriter.toString());
writer.flush();
writer.close();

 说白了就是使用StringWriter代替了writer,我在代码里直接转换成了StringReader,同样,如果你没有必要做这个的话,你可以把StringWriter转换成String.



作者: heweiya 
声明: 本文系JavaEye网站发布的原创文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

已有 0 人发表回复,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2009-12-18 10:41  Fervour  阅读(2125)  评论(0编辑  收藏  举报