将字节数组注入数组列表的正确方法是什么?
private ArrayList<byte[]> bytes;
<property name="bytes">
<list>
<value>0x03,0x4d</value>
</list>
</property>
不起作用,因为每个字符 (0,x,0,3) 都转换为单个字节。我也尝试过像 这样的编码,但这也不起作用。
一种解决方法是先转换为整数,然后在 bean 中手动转换回字节,但这不太漂亮。
任何的想法?
问候
有一个内置的ByteArrayPropertyEditor
,但根据 Javadoc,它只将字符串转换为相应的字节数组:
字节数组的编辑器。字符串将简单地转换为其相应的字节表示。
也许您应该编写自己的属性编辑器来将任意表示形式转换byte[]
为列表?
这是一个用于创建字节数组的 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 文件中使用这种语法。