2008-10-28 3 views
19

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

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]        ^

Любые идеи, почему и как я могу избежать этого?


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

+0

Так почему это работало в Eclipse ?? – paxdiablo 2008-10-28 12:44:37

ответ

22

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

0

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

0

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

Вместо:

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

Try:

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

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

Смежные вопросы