Как Smooks обрабатывает массив байтов

У меня есть класс Vo, который содержит член типа byte[] . теперь я хочу записать все данные объекта этого класса в файл, и я использую smooks API с приведенной ниже конфигурацией:

smookConfig.xml:

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

теперь, после создания объекта и заполнения всех данных и после экспорта его в файл с использованием smooks API, когда я открываю файл в двоичном считывателе, я вижу, что байты преобразуются в их код ASCI, поэтому, если байт был 0x00 в VO тогда, когда Я открываю файл, я нахожу его как 0x30, который является кодом ASCI для символа 0. Интересно, есть ли в smooks какой-либо способ экспортировать эти байтовые данные без какого-либо преобразования, чтобы он делал то же самое, что и java OutputStream.write(byte[]), который печатает двоичные данные без какого-либо преобразования.

с уважением,


person user2347436    schedule 02.03.2015    source источник


Ответы (1)


Проблема в том, что FreeMarker — это текстовый механизм шаблонов. Его вывод идет в Writer, а не напрямую в OutputStream. Конечно, если вы знаете, что такое выходная кодировка, и это не UTF-что-то или другая многобайтная кодировка, то вы можете схитрить... и для читерства вам придется написать пользовательскую директиву (TemplateDirectiveModel) или просто вызвать Java метод, который возвращает такой String (я не знаю, позволяет ли Smooks отображать некоторые простые объекты Java).

person ddekany    schedule 02.03.2015
comment
Спасибо, ddekany, за ответ. На самом деле байты данных, которые я пытаюсь вывести, принадлежат байтам данных изображения jpg. и получатель данных хочет их в двоичном формате и не хочет даже в Base64. поэтому я думаю, что smooks API для меня бесполезен в этом случае. благодарю вас . - person user2347436; 03.03.2015