2

私はApacheBCELを使用して、それぞれが独自の関連付けられたイメージを持つJavaクラスを動的に作成しています。これらの生成されたクラスは、次のインターフェイスを実装します。

interface ImageOwner {

    byte[] getImage();

}

'getImage'メソッドを動的に実装する場合、メソッドが呼び出されたときにバイト配列を作成/返すためのバイトコードを生成できますが、可能であれば、バイト配列への参照を返すだけです。Javaクラスファイル内に生データを保存することは可能ですか?

4

5 に答える 5

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 に答える
1

いくつかの調査の結果、ニーズを達成するために私が見つけた最善の方法は、画像データをbase64でエンコードし、定数プールを使用して結果の文字列を格納することでした。=〜30%の損失があっても、コンストラクターやその他のメソッドを使用してバイト配列フ​​ィールドを初期化するよりも優れているようです。

于 2012-03-27T14:37:34.310 に答える
1

定数プールに格納できる定数は、Int、Floats、Longs、Doubles、Strings、およびClassesのみです。最善の策は、文字列として保存し、実行時にByte[]に変換することです。適切に変更されたUnicodeエンコーディングを適用する限り、文字列はnull文字を処理できるため、base64エンコードする必要はありません。

于 2012-06-16T01:08:38.927 に答える
0

jarに含まれ、クラスローダーを介してロードされるファイルから生データをロードする静的イニシャライザーを持つImplクラスを定義するだけです。

于 2012-03-27T14:44:13.280 に答える
0

BCELの配列の構文はバイト配列として保存できます。

[B

バイト配列の場合

[java.lang.String

文字列配列などの場合。

于 2012-05-31T04:10:48.083 に答える