IO流之MemoryOutputStream
先简单的描述一下需求。再用Freemarker的时候需要根据模板文件来生成目标对象,Freemarker可以把生成的目标对象回写到文件中,这种方式并不是我想要的。我需要直接拿到对象进行传输。
看看常规Freemarker的处理方式:
下面的图是代表我要的方式,重点是最后一步:

Freemarker是以管道流的方式进行对数据读出/写入的操作。看了目前的IO流,并没有发现一个对象可以支持直接写入到内存的流,可能是我没有发现。所以我自己写一个,实现的比较简单。先上代码:
//这里为了代码的简洁,删除了一些代码,重点MemoryOutputStream作为接收流的使用方式public String cache(Map<String,Object> root,String ftl){MemoryOutputStream mos = new MemoryOutputStream();//ftl为模板Template t = this.getTemplate(ftl);out = new OutputStreamWriter(mos, "UTF-8");//root为传进来的数据对象t.process(root, out);return mos.toString();}整个代码和使用场景就完了,后续还是需要把整个IO流作一个梳理。目前基本上是需要用哪个然后去查
API,并没有一个完整的框架。