六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 46|回复: 0

Freemarker输出字符串而不是文件

[复制链接]

升级  74%

41

主题

41

主题

41

主题

秀才

Rank: 2

积分
161
 楼主| 发表于 2013-1-15 02:45:20 | 显示全部楼层 |阅读模式
    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.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表