2

将字节数组注入数组列表的正确方法是什么?

private ArrayList<byte[]> bytes;

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

不起作用,因为每个字符 (0,x,​​0,3) 都转换为单个字节。我也尝试过像  这样的编码,但这也不起作用。

一种解决方法是先转换为整数,然后在 bean 中手动转换回字节,但这不太漂亮。

任何的想法?

问候

4

2 回答 2

2

有一个内置的ByteArrayPropertyEditor,但根据 Javadoc,它只将字符串转换为相应的字节数组:

字节数组的编辑器。字符串将简单地转换为其相应的字节表示。

也许您应该编写自己的属性编辑器来将任意表示形式转换byte[]为列表?

于 2011-02-23T08:19:28.020 回答
2

这是一个用于创建字节数组的 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 转义

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

输出:

哈哈哈哈哈哈???

当然,您也可以在 Spring XML 文件中使用这种语法。

于 2011-02-23T09:03:58.643 回答