ошибка javac "слишком большой код"? - PullRequest
19 голосов
/ 28 октября 2008

У меня есть модульный тест, в котором я статически определил довольно большой байтовый массив (более 8000 байтов) как байтовые данные файла, который я не хочу читать каждый раз, когда запускаю свой модульный тест.

private static final byte[] FILE_DATA = new byte[] {
12,-2,123,................
}

Это нормально компилируется в Eclipse, но при компиляции через скрипт Ant я получаю следующую ошибку:

[javac] C:\workspace\CCUnitTest\src\UnitTest.java:72: code too large
[javac]     private static final byte[] FILE_DATA = new byte[] {
[javac]                                 ^

Есть идеи, почему и как мне этого избежать?


Ответ : Ответ Шими сделал свое дело. Я переместил массив байтов в отдельный класс, и он прекрасно скомпилирован. Спасибо!

Ответы [ 3 ]

23 голосов
/ 28 октября 2008

Методы в Java ограничены до 64 КБ в байт-коде. Статическая инициализация выполняется одним способом (см. ссылка )
Вы можете попытаться загрузить данные массива из файла.

0 голосов
/ 25 марта 2014

Вы можете использовать внутренние классы, так как у каждого будет свой предел в 64 КБ. Это может не помочь вам с одним большим массивом, поскольку внутренний класс будет подвергаться тому же пределу статического инициализатора, что и ваш основной класс. Однако вы заявили, что вам удалось решить проблему, переместив массив в отдельный класс, поэтому я подозреваю, что вы загружаете не только этот единственный массив в свой основной класс.

Вместо:

private static final byte[] FILE_DATA = new byte[] {12,-2,123,...,<LARGE>};

Попробуйте:

private static final class FILE_DATA
{
    private static final byte[] VALUES = new byte[] {12,-2,123,...,<LARGE>};
}

Тогда вы можете получить доступ к значениям как FILE_DATA.VALUES[i] вместо FILE_DATA[i], но вы можете ограничиться 128 КБ, а не только 64 КБ.

0 голосов
/ 28 октября 2008

Вы можете загрузить байтовый массив из файла, используя @BeforeClass статический метод. Это обеспечит загрузку только один раз для всех ваших юнит-тестов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...