我有一些类需要一堆数据表来完成它们的工作(基本上是基元数组,byte[],short[],int[] 和 float[])。
有些表比较大。在代码中初始化它们会炸毁类文件,并且在某些情况下它还超出了类初始化器的大小限制。
目前我已将数据存储在文件中,并使用 getResourceAsStream() 读取静态块中的文件。
有没有更好的方法使数据与类文件密不可分?无需独立于类替换数据。
课堂资源的使用听起来非常合适。它们被滥用于许多目的,但这是一个很好的应用程序。
也许您可以将数据编码为字符串文字(64K 限制)。
final byte[] table = decode("20,5F,A9,3D,E3.........");
我认为这取决于情况。例如,对于 DES 或 AES 之类的东西,这些表实际上是算法所固有的:在我看来,将它们与使用它们的代码分开并没有多大意义。在这些情况下,表格并不是真正的“数据”:它们是更多方式的代码。
当我编写一个 DES 实现时,我仍然希望让它们稍微走开,所以我将它们作为包私有类的静态成员包含在同一个包中。然后您甚至可以进行静态导入并使用数组,就好像它们是在您的类中声明的一样。