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推荐
- 上海:月薪1-2万诚聘资深PHP开发人员
- 北京:手机之家网站诚聘PHP程序员
- 成都:月薪5千到1万招聘Java开发工程师
- 上海:天会皓闻诚聘CTO技术总监
- 上海:高薪诚聘Python开发人员
- 北京:高薪招聘Java搜索开发工程师
- 上海:天会皓闻诚聘资深Java架构师
作者:Fervour
出处:http://fervour.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://fervour.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。