首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Freemarker输出字符串而不是资料

2012-10-27 
Freemarker输出字符串而不是文件??? Freemarker一般是通过writer输出到文件的处理过程,但是这个过程不是很

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.

Configuration cfg = new Configuration();cfg.setDefaultEncoding(encoding);Template t = new Template(TEMPALTE_DEFAULT_KEY, new StringReader(templateStr), cfg);StringWriter out = new StringWriter();t.process(map, out);return out.getBuffer().toString();Configuration cfg = new Configuration();cfg.setDefaultEncoding(encoding);Template t = new Template(TEMPALTE_DEFAULT_KEY, new StringReader(templateStr), cfg);StringWriter out = new StringWriter();t.process(map, out);return out.getBuffer().toString();
雖然不必要但是有好處,用buffer對性能上好處多多。

热点排行