是否可以将一个字节数组(原始数据)存储在java类文件中?
我使用Apache BCEL来动态创建每个都有自己关联图像的java类。这些生成的类实现以下接口:是否可以将一个字节数组(原始数据)存储在java类文件中?
interface ImageOwner {
byte[] getImage();
}
当动态地实施“的getImage”方法,我可以产生字节代码来创建/调用该方法时返回字节数组,但我宁愿只返回到基准字节数组如果可能的话。是否有可能将原始数据存储在java类文件中?
经过一番研究,我发现,实现我的需求的最佳方式是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;
}
}
这是一个文本的字节数组,这回答你“如何在类文件中存储字节”的问题。
大多数人会在构造函数中运行时加载该文件中的图像字节,但是你可能有一些特殊的需要权证这种方法
这或多或少是我需要的,但我不想为了得到字节调用外部实用工具类,而不是我想要的字节存储在类文件中和在类体内 – 2012-03-24 15:20:37
如果什么检索我想是不可能的,你肯定知道,只需在答案中指定,我将标记为正确。 – 2012-03-24 15:21:34
@ThiadodeArruda我编辑了代码以举例说明如何去做 – Bohemian 2012-03-24 15:30:44
只需定义一个Impl类,该类有一个静态初始化程序,用于从包含在jar中的文件加载原始数据并通过类加载程序加载。
你可以只将其存储为一个字节数组中BCEL数组语法
[B
的字节数组
[java.lang.String
一个字符串数组等
而唯一不变你可以在常量池中存储Ints,Floats,Longs,Doubles,Strings和Classes。最好的方法是将它作为字符串存储并在运行时将其转换为字节[]。不需要base64对它们进行编码,因为字符串可以处理空字符,只要您应用正确的修改后的Unicode编码即可。
数组* *是*中的一个引用。我不确定你在问什么。 – 2012-03-24 13:58:52
我知道,我正在考虑从一个常量池或类似的东西中获取这个参考。 – 2012-03-24 14:02:47
*确切地说,*“这种原始数据”是什么意思。 – Bohemian 2012-03-24 14:17:32