Java在索引文件中存储多个图像,配置文件等?

时间:2016-09-28 16:16:15

标签: java caching

我见过一些将数据存储在索引文件中的程序和游戏,他们从该文件加载他们通常称为cache的数据。

我希望能够以这种方式加载我的数据:

final int SPRITES_INDEX = 3;

List<Sprite> sprites = (List<Sprite>) cache.loadIndex(SPRITES_INDEX);

有没有人知道它是如何完成的以及为什么这样做?或者这种存储数据的方法有名称吗?

2 个答案:

答案 0 :(得分:3)

你应该查看&#34;资源&#34; in&#34; jar&#34;文件。这是java世界中这项工作常用的东西。通常情况下,jar文件只是一个zip文件,它是顺序的,但多年前他们添加了索引jar文件的功能,这些文件提供对其内容的随机访问。

您可以从这里开始:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/jar.html

(查找&#34; i&#34;选项,为jar文件添加索引。)

答案 1 :(得分:1)

至少对于图像/渲染,这称为Texture Packing,因为OpenGL在渲染之前“绑定”了图像,并且这种绑定在处理方面可能很昂贵。

将纹理打包在较大的图像中允许游戏/应用程序仅绑定一次,然后,基于预定义像素坐标的索引,仅渲染较大图像的一部分,就像它们是单独的较小图像一样。

我建议看看LibGDX的TexturePacker

提取物:

  

在OpenGL中,绑定纹理,完成一些绘制,另一个纹理   绑定,更多的绘图,等等。绑定纹理是相对的   价格昂贵,因此很适合在较大的图像上存储许多较小的图像   图像,绑定较大的纹理一次,然后绘制它的一部分很多   倍。 libgdx有一个TexturePacker类,它是一个命令行   将许多较小图像打包到较大图像上的应用程序。它   存储较小图像的位置,以便它们很容易   使用TextureAtlas类在您的应用程序中通过名称引用。

     

TexturePacker使用多种打包算法但最重要   基于最大矩形算法。它也使用粗暴   力量,包装与各种大小的众多启发式然后   选择最有效的结果。

请注意,这是Caching的一般概念,类似但不相同。

在计算机编程中,缓存包括将一段内存专用于存储最近或经常使用的数据,以避免每次需要/访问时都必须重新创建/重新处理该数据。

因此,它与纹理包装的概念类似,但不一样,相反,它不是为了重新创建/重新处理图像本身,而是为了避免昂贵的复杂化/处理进一步发展。

考虑到问题的游戏背景,同样重要的是要注意另一个概念,这次更接近缓存,存在。它被称为Pooling,包括创建一个预先创建/预处理的对象实例的缓存(在本例中称为Pool),这些实例可能会随着时间的推移需要不同的数量, RTS游戏中的单位示例,以避免在需要时创建它们(反过来避免处理中的突然“重量”,导致FPS突然下降,或“游戏”中的“口吃”)