Smooks如何处理字节数组

时间:2015-03-02 09:44:10

标签: byte freemarker smooks

我有一个类Vo,它包含byte []类型的成员。现在我想把这个类的整个对象数据写到一个文件中,并使用下面配置的smooks API:

smookConfig.xml:

<ftl:template><!--<#list objectVo.arrayOfBytes as oneByte> ${oneByte}</#list>--> </ftl:template>

现在在创建对象并填充所有数据并使用smooks API将其导出到文件后,当我在二进制阅读器中打开文件时,我可以看到字节被转换为它们的ASCI代码,所以如果字节是0x00 in VO然后当我打开文件时,我会发现它是0x30,这是charcter 0的ASCI代码。 我想知道smooks中是否有任何方法可以在没有任何转换的情况下导出字节数据,这样它就可以像java OutputStream.write(byte [])那样打印二进制数据而不进行任何转换。

问候,

1 个答案:

答案 0 :(得分:0)

问题是,FreeMarker是一个文本模板引擎。它的输出进入Writer,而不是直接进入OutputStream。当然,如果您知道输出字符集是什么,并且它不是UTF-something或其他多字节字符集,那么您可以作弊...而对于作弊,您必须编写自定义指令(TemplateDirectiveModel)或只需调用一个返回String的Java方法(我不知道Smooks是否允许您公开一些普通的Java对象)。