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

问题描述:

我使用Apache BCEL来动态创建每个都有自己关联图像的java类。这些生成的类实现以下接口:是否可以将一个字节数组(原始数据)存储在java类文件中?

interface ImageOwner { 

    byte[] getImage(); 

} 

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

+2

数组* *是*中的一个引用。我不确定你在问什么。 – 2012-03-24 13:58:52

+0

我知道,我正在考虑从一个常量池或类似的东西中获取这个参考。 – 2012-03-24 14:02:47

+0

*确切地说,*“这种原始数据”是什么意思。 – Bohemian 2012-03-24 14:17:32

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

我真的不知道在这里,因为它似乎太简单的问题,而是为了完整性,这会做什么,我想你想做的事:

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

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

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

+0

这或多或少是我需要的,但我不想为了得到字节调用外部实用工具类,而不是我想要的字节存储在类文件中和在类体内 – 2012-03-24 15:20:37

+0

如果什么检索我想是不可能的,你肯定知道,只需在答案中指定,我将标记为正确。 – 2012-03-24 15:21:34

+0

@ThiadodeArruda我编辑了代码以举例说明如何去做 – Bohemian 2012-03-24 15:30:44

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

你可以只将其存储为一个字节数组中BCEL数组语法

[B 

的字节数组

[java.lang.String 

一个字符串数组等

而唯一不变你可以在常量池中存储Ints,Floats,Longs,Doubles,Strings和Classes。最好的方法是将它作为字符串存储并在运行时将其转换为字节[]。不需要base64对它们进行编码,因为字符串可以处理空字符,只要您应用正确的修改后的Unicode编码即可。