我如何在类中包含(常量)原始数据表?

发布于 2024-09-10 09:22:36 字数 233 浏览 5 评论 0原文

我有一些类需要一堆数据表来完成它们的工作(基本上是基元数组、byte[]、short[]、int[] 和 float[])。

有些桌子比较大。在代码中初始化它们会炸毁类文件,并且在某些情况下它还会超出类初始值设定项的大小限制。

目前我已将数据存储在文件中,并使用 getResourceAsStream() 读取静态块中的文件。

有没有更好的方法,让数据与class文件密不可分?无需独立于类来替换数据。

I have some classes that need a bunch of data tables to do their work (basically arrays of primitives, byte[], short[], int[] and float[]).

Some of the tables are relatively large. Initializing them in the code blows up the class file, and in some cases it also exceeds the size limit for the class initializer.

Currently i have stored the data in files and use getResourceAsStream() to read the files in a static block.

Is there a better way that makes the data inseparable from the class file? There is no need to ever replace the data independently from the class.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

三生池水覆流年 2024-09-17 09:22:36

类资源的使用听起来非常合适。它们被滥用于多种目的,但这是一个很好的应用。

The use of class resources sounds perfectly appropriate. They are abused for many purposes, but this is a great application.

嘿嘿嘿 2024-09-17 09:22:36

也许您可以将数据编码为字符串文字(64K 限制)。

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

maybe you can encode the data in a string literal (64K limit).

final byte[] table = decode("20,5F,A9,3D,E3.........");
水溶 2024-09-17 09:22:36

我认为这取决于具体情况。例如,对于 DES 或 AES 之类的东西,这些表实际上是算法固有的:在我看来,将它们与使用它们的代码分开没有多大意义。在这些情况下,表并不是真正的“数据”:它们以更多方式进行编码。

当我编写 DES 实现时,我仍然想让它们稍微脱离一点,所以我将它们作为包私有类的静态成员包含在同一个包中。您甚至可以执行 static import 然后使用这些数组,就像它们在类中声明一样。

I think it depends on the situation. For something like DES or AES for example, the tables are actually intrinsic to the algorithm: to separate them from the code that uses them doesn't make much sense in my eyes. In these cases the table isn't really "data": they're code in more ways.

When I wrote a DES implementation, I still did want to get them out of the way a bit so I included them as static members of a package-private class in the same package. You can even do a static import then and use the arrays as if they're declared right there in your class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文