0

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

smookConfig.xml:

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

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

问候,

4

1 回答 1

0

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

于 2015-03-02T19:39:54.593 回答