2010-07-15 48 views
1

我有一些類需要一堆數據表來完成他們的工作(基本上是基元數組,byte [],short [],int []和float [])。如何在一個類中包含(常量)原始數據表?

某些表格比較大。在代碼中對它們進行初始化會拋出類文件,在某些情況下,它也會超出類初始化程序的大小限制。

目前我已經將數據存儲在文件中並使用getResourceAsStream()來讀取靜態塊中的文件。

有沒有更好的方式使數據與類文件不可分離?不需要獨立於班級取代數據。

回答

1

使用類資源聽起來非常合適。他們被濫用於許多目的,但這是一個很好的應用程序。

0

也許你可以在字符串文字(64K限制)中編碼數據。

final byte[] table = decode("20,5F,A9,3D,E3........."); 
+0

我不覺得這是個好主意。雖然它將數據保存在類文件中,但字符串文字將被攔截,從而導致內存要求大量增加。 – Durandal 2010-07-16 00:15:35

+0

interned字符串可以gc-ed。問題在於類常量池中的引用。一個解決方法可能是使用一次性的類加載器來加載字符串文字的類,在計算完字節數組後,放棄它們,這樣它們就會被加密。當然這太麻煩了。從文件中讀取更好。 – irreputable 2010-07-16 04:00:25

0

我認爲這取決於情況。例如,對於像DES或AES這樣的東西,表格實際上是算法的內在特徵:將它們與使用它們的代碼分開在我眼中沒有多大意義。在這些情況下,表格並不是真正的「數據」:它們是更多方式的代碼。

當我編寫了一個DES實現時,我仍然希望將它們排除在外,所以我將它們作爲包私有類的靜態成員包含在同一個包中。你甚至可以做一個static import然後使用這些數組,就好像它們在你的類中聲明的一樣。

相關問題