javac错误“代码太大”?

我有一个unit testing,我已经静态定义了一个相当大的字节数组(超过8000字节)作为我每次运行unit testing时不想读取的文件的字节数据。

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

任何想法为什么以及如何避免这种情况?


:Shimi的答案就行了。 我将字节数组移到一个单独的类,它编译得很好。 谢谢!

Java中的方法在字节码中限制为64k。 静态初始化在单个方法中完成(参见链接 )
您可以尝试从文件加载数组数据。

您可以在@BeforeClass静态方法中从文件加载字节数组。 这将确保它只为您的所有unit testing加载一次。

您可以利用内部类,因为每个类都有自己的64KB限制。 它可能无法帮助您使用单个大型数组,因为内部类将受到与主类相同的静态初始化程序限制。 但是,您声明通过将arrays移动到单独的类来设法解决问题,因此我怀疑您在主类中加载的不仅仅是这个单个数组。

代替:

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

尝试:

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

然后,您可以访问值FILE_DATA.VALUES[i]而不是FILE_DATA[i] ,但您需要128KB限制而不是64KB。