2015-03-02 53 views
0

我有一個包含byte []類型成員的類Vo。現在我想這一類的整個對象數據寫入一個文件,我使用的Smooks API下面的配置:Smooks如何處理字節數組

smookConfig.xml:

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

創建對象後填充所有數據後使用smooks API將它導出到一個文件,當我在二進制閱讀器中打開文件時,我可以看到這些字節被轉換爲它們的ASCI代碼,所以如果VO中的字節爲0x00,那麼當我打開文件時,我會發現它是0x30是charcter 0的ASCI代碼。 我不知道是否有任何方式在smooks中導出這些字節的數據而不進行任何轉換,這樣它就可以像java OutputStream.write(byte [])一樣執行打印二進制數據而不進行任何轉換。

問候,

回答

0

問題是,FreeMarker的是文本模板引擎。它的輸出進入Writer,而不是直接進入OutputStream。當然,如果你知道輸出字符集是什麼,並且它不是UTF-something或其他多字節字符集,那麼你可以作弊...並且爲了作弊,你將不得不編寫一個自定義指令(TemplateDirectiveModel)或者只是調用Java方法返回String這樣的(我不知道Smooks是否讓你公開一些普通的Java對象)。

+0

謝謝ddekany回覆。實際上我試圖輸出的數據字節屬於jpg圖像數據字節。而數據的接收者希望在Binary中使用它,即使在Base64中也不需要。所以我猜在這種情況下,smooks API對我來說沒有用處。謝謝 。 – user2347436 2015-03-03 13:49:40