|
|
1
22
我个人 不会 把它放在源格式中。
相反,在JAR文件中包含一些适当的原始格式的数据(我假设您将打包应用程序或库)并使用
您很可能希望一个类封装加载、缓存和提供这些数据——但我认为将其转换为源代码并没有多大好处。 |
|
2
7
由于Java字节码文件的限制,类文件不能大于64K字节。(它们不适用于此类数据。) 我将在启动程序时加载数据,使用如下代码行:
( NB: 扫描器速度很慢,所以不要仅仅因为它有一个简单的接口就想使用它。坚持使用某种形式的bufferedreader和split,或stringtokenizer。)
如果将数据转换为二进制格式,当然可以提高效率。在这种情况下,您可以利用
根据您希望如何访问数据,最好将记录存储在哈希图中。(
如果希望在JVM加载类文件的同时加载数据(大致!)您可以进行读取/初始化,而不是在方法内,而是在
对于内存映射方法
,看看
可以找到完整的代码示例 here . Dan Bornstein(Dalvikvm的主要开发人员)在 this talk (看看0:30:00左右)。然而,我怀疑这个解决方案是否适用于与兆字节一样多的数据。 |
|
|
3
3
一个想法是您使用枚举器,但我不确定这是否适合您的实现,它还取决于您计划如何使用数据。
} 然后可以像这样访问:
另一个想法是使用 static 初始化器设置类的私有字段。 |
|
|
4
3
将数据输入源实际上不是最快的解决方案,也不是一个长期的解决方案。加载Java类是相当复杂和缓慢的(至少在字节码验证的平台上,对Android不确定)。
最快的方法是定义自己的二进制索引格式。你可以把它当作
尽管在这样做之前,您确定这不是过早的优化吗?最简单(可能仍然相当快)的解决方案是jsut序列化一个映射、列表或数组——您是否尝试过这个方法,并确定它实际上太慢了? |
|
|
5
1
请注意,对类及其结构的大小有严格的限制[Ref JVM Spec . |
|
|
6
1
这是你在Java中定义它的方式,如果我理解你在做什么:
|
|
|
7
1
看起来您计划编写自己的轻量级数据库。
如果不能限制块的长度,请将字符串转储到另一个文件中,并只在表中存储偏移量。这需要额外的文件访问权限,并使修改数据变得困难。
为了更快地访问,您可以在哈希映射中缓存一些读取条目,并且在读取新条目时总是从映射中删除最旧的条目。
伪代码中缺少:
|
|
|
8
0
还可以声明一个静态类(或一组静态类),将指定的值公开为 方法 . 毕竟,您希望代码能够找到给定名称的值,而不希望该值发生更改。 所以:location=mylibofconstants.returnHamburgerlocation().zipcode 你可以用lazyinitialization将这些东西存储在哈希表中,如果你认为即时计算是浪费时间的话。 |
|
|
9
0
你需要的不是缓存吗? 作为类,它被加载到内存中,实际上不局限于定义的大小,应该和使用常量一样快… 实际上,它甚至可以使用某种索引来搜索数据(例如对象hashcode…) 例如,您可以创建所有数据数组(例如23012、22,“Hamburger”),然后创建3个哈希图: 图1.Put(23012,汉堡); 图2.Put(22,汉堡); MAP3.PUT(“汉堡”,汉堡); 这样你就可以根据你的参数在地图上快速搜索… (但只有当你的钥匙在地图上是唯一的…这只是一个能激励你的例子) 在工作中,我们有一个非常大的webapp(80个weblogic实例),它几乎就是我们要做的:到处缓存。从数据库中的CountryList创建缓存… 有许多不同类型的缓存,你应该检查链接并选择你需要的… http://en.wikipedia.org/wiki/Cache_algorithms |
|
|
10
0
如果您要在代码中创建数据,那么它将在第一次使用时被加载。这不太可能比从一个单独的文件中加载效率高出很多,而且在分析类文件中的数据的同时,JVM必须验证和编译字节码以创建100万次的每个对象,而不是仅仅从循环中加载一次。
如果您想要随机访问,并且不能使用内存映射文件,那么
您可能需要检查 HDF5 库在您的平台上运行;但是对于这样一个简单而小型的数据集来说,这可能是多余的。 |
|
|
11
0
我建议使用资产来存储这些数据。 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |