2

我正在使用Apache BCEL动态创建 java 类,每个类都有自己的关联图像。这些生成的类实现以下接口:

interface ImageOwner {

    byte[] getImage();

}

在动态实现“getImage”方法时,我可以在调用该方法时生成字节码来创建/返回字节数组,但如果可能的话,我宁愿只返回对字节数组的引用。是否可以将原始数据存储在 java 类文件中?

4

5 回答 5

1

您可以在常量池中存储的唯一常量是 Ints、Floats、Longs、Doubles、Strings 和 Classes。最好的办法是将其存储为字符串并在运行时将其转换为 Byte[]。无需对它们进行 base64 编码,因为字符串可以处理空字符,只要您应用适当的修改后的 unicode 编码。

于 2012-06-16T01:08:38.927 回答
1

经过一番研究,我发现满足我需求的最佳方法是对图像数据进行base64编码并使用常量池来存储生成的字符串。即使有 =~ 30% 的损失,它似乎也比使用构造函数或其他方法来初始化字节数组字段要好。

于 2012-03-27T14:37:34.310 回答
1

我真的不确定,因为这似乎是一个太简单的问题,但为了完整起见,这将做我认为你想做的事情:

public class ImageOwnerImpl implements ImageOwner {

    // A literal byte array. Tedious, but you could write code
    // to auto-generate this source from a file
    private byte[] imageByteArray = new byte[] { -128, 127, ...etc };

    public byte[] getImage() {
        return imageByteArray;
    }
}

这是一个文字字节数组,它回答了您“如何在类文件中存储字节”的问题。

大多数人会在运行时在构造函数中从文件中加载图像字节,但是您可能有一些特殊需要来保证这种方法

于 2012-03-24T14:55:07.363 回答
0

您可以将其存储为字节数组,BCEL 中数组的语法是

[B

对于字节数组

[java.lang.String

对于字符串数组等。

于 2012-05-31T04:10:48.083 回答
0

只需定义一个具有静态初始化程序的 Impl 类,该初始化程序从包含在您的 jar 中并通过类加载器加载的文件中加载原始数据。

于 2012-03-27T14:44:13.280 回答