Можно ли хранить байтовый массив (необработанные данные) в файле класса Java? - PullRequest
2 голосов
/ 24 марта 2012

Я использую Apache BCEL для динамического создания классов Java, каждый из которых будет иметь свой собственный связанный образ.Эти сгенерированные классы реализуют следующий интерфейс:

interface ImageOwner {

    byte[] getImage();

}

При динамической реализации метода 'getImage' я мог бы генерировать байтовые коды для создания / возврата байтового массива при вызове метода, но я бы предпочел просто вернутьссылка на байтовый массив, если это возможно.Можно ли хранить необработанные данные внутри файла классов Java?

Ответы [ 5 ]

1 голос
/ 27 марта 2012

После некоторых исследований я нашел лучший способ удовлетворить мои потребности - кодировать данные изображения с помощью base64 и использовать постоянный пул для хранения полученной строки. Даже с потерей = ~ 30% это кажется лучше, чем использование конструктора или других методов для инициализации поля массива байтов.

1 голос
/ 24 марта 2012

Я действительно не уверен, потому что это кажется слишком простым вопросом, но для полноты, это будет делать то, что, я думаю, вы хотите сделать:

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 голосов
/ 16 июня 2012

Единственные константы, которые вы можете хранить в пуле констант, это Ints, Float, Longs, Double, Strings и Classes. Лучше всего сохранить его как строку и преобразовать в байт [] во время выполнения. Нет необходимости кодировать их в base64, поскольку строки могут обрабатывать нулевые символы, если вы применяете правильную модифицированную кодировку Unicode.

0 голосов
/ 31 мая 2012

Вы можете просто сохранить его как байтовый массив, синтаксис для массива в BCEL:

[B

для байтового массива

[java.lang.String

для строкового массива и т. Д.

0 голосов
/ 27 марта 2012

Просто определите класс Impl, который имеет статический инициализатор, который загружает необработанные данные из файла, который включен в ваш файл jar и загружается через загрузчик классов.

...