是否可以将字节数组(原始数据)存储在java类文件中



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

interface ImageOwner {
    byte[] getImage();
}

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

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

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

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

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

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

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

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

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

[B

对于字节阵列

[java.lang.String

对于字符串数组等,

相关内容

  • 没有找到相关文章

最新更新