Spring: внедрить байтовый массив в ArrayList - PullRequest
2 голосов
/ 23 февраля 2011

Как правильно ввести массив байтов в массив списков?

private ArrayList<byte[]> bytes;

<property name="bytes">
<list>
    <value>0x03,0x4d</value>
</list>
</property>

не работает, поскольку каждый символ (0, x, 0,3) преобразуется в один байт.Я также пытался кодировать как, но это тоже не работает.

Один обходной путь - сначала преобразовать в целое число, а затем вручную преобразовать обратно в байт в bean-компоненте, но это не слишком красиво.

Есть идеи?

С уважением

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

Вот FactoryBean для создания вашего байтового массива:

public class ByteArrayFactoryBean extends AbstractFactoryBean<byte[]>{

    @Override
    public Class<?> getObjectType(){
        return byte[].class;
    }

    private String data;

    @Required
    public void setData(final String data){
        this.data = data;
    }

    @Override
    protected byte[] createInstance() throws Exception{
        final String[] tokens = data.split("\\s*,\\s*");
        final byte[] output = new byte[tokens.length];
        for(int i = 0; i < tokens.length; i++){
            output[i] = Byte.decode(tokens[i]).byteValue();
        }
        return output;
    }

}

Использование:

<bean class="foo.bar.SomeBean">
    <property name="bytes">
        <list>
            <bean class="foo.bar.ByteArrayFactoryBean">
                <property name="data" value="0x03,0x4d" />
            </bean>
        </list>
    </property>
</bean>

(Регистрация PropertyEditor была бы более правильной, но и более трудоемкой)


Но если я правильно понимаю ваши комментарии, ваша настоящая проблема в том, что вы не знаете, как написать строку с экзотическими байтами? Вы можете использовать Unicode Escape :

System.out.println("H\u00e4\u00e4\u00e4\u00e4\u00e4hhh???");

Выход:

Hääääähhh ???

Конечно, вы также можете использовать этот синтаксис в файлах Spring XML.

2 голосов
/ 23 февраля 2011

Существует встроенный ByteArrayPropertyEditor, но согласно Javadoc он только преобразует строки в соответствующий байтовый массив:

Редактор для байтовых массивов. Строки будут просто преобразованы в соответствующие им байтовые представления.

Может быть, вам следует написать собственный редактор свойств для преобразования произвольного представления byte[] в список?

...