2008-10-28 115 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

您可以利用內部類,因爲每個類都有自己的64KB限制。它可能無法幫助您處理單個大型數組,因爲內部類將受到與主類相同的靜態初始化程序限制。然而,你表示你設法通過將你的數組移到一個單獨的類來解決這個問題,所以我懷疑你在主類中加載的不僅僅是這個單一的數組。

相反的:

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],但你受到了限制爲128KB,而不是僅僅64KB。