Spring:将字节数组注入到ArrayList中

发布于 2024-10-18 22:39:08 字数 358 浏览 5 评论 0原文

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

private ArrayList<byte[]> bytes;

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

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

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

有什么想法吗?

问候

what is the correct way of injecting a byte array into an arraylist?

private ArrayList<byte[]> bytes;

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

does not work, as every character (0,x,0,3) is converted into a single byte.
I also tried encoding like , but that doesn't work either.

One workaround would be converting to integer first an then manually convert back to byte in the bean, but that is not too pretty.

Any idea?

Regards

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

叹梦 2024-10-25 22:39:08

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

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

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

There is a built-in ByteArrayPropertyEditor, but according to the Javadoc, it only converts Strings into corresponding byte array:

Editor for byte arrays. Strings will simply be converted to their corresponding byte representations.

Maybe you should write your own property editor to convert arbitrary representation of byte[] into list?

岁吢 2024-10-25 22:39:08

这是一个用于创建字节数组的 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 文件中使用此语法。

Here's a FactoryBean to create your byte array:

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;
    }

}

Usage:

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

(Registering a PropertyEditor would be more correct, but also more work)


But if I understand your comments right, your actual problem is that you don't know how to write a String with exotic bytes? You can use Unicode escapes:

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

Output:

Hääääähhh???

You can of course also use this syntax in Spring XML files.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文