这主要是游戏使用的一种技术,它在一个文件中包含所有声音,在另一个文件中包含纹理等。这些文件通常达到GB大小。
这样做的原因是将子目录中的所有内容保存为小文件 - 许多小游戏使用的每个纹理一个,大型系统受到大公司的青睐?
是否存在大量小文件的文件系统开销? 他们是否试图保护自己的财产 - 尽管大多数似乎只是一个带有新扩展名的压缩文件?
答案 0 :(得分:6)
答案 1 :(得分:1)
文件系统确实有开销。通常,文件将磁盘空间四舍五入为2的幂(例如,最多4 KB),因此许多小文件会浪费空间。一些现代文件系统试图减轻这种情况,但AFAIK还没有普及。此外,文件系统在访问多个文件时通常很慢。例如。复制一个400 MB文件通常要比4000 100 KB文件快得多。
当您必须修改文件时,文件系统会派上用场,因为它们可以比任何简单的本土解决方案更好地处理文件大小的变化。但是,对于不变的游戏数据来说,情况肯定不是这样。
答案 2 :(得分:0)
在Apple系统上,最常见的方法是按照您的建议使用目录。它们被称为Bundles,并且在Finder中仅表示为一个文件,但如果你更多地探索它们,它们实际上就是目录。这使得在从这个包中加载单个项目时非常容易编写代码并节省内存。 :-)另外,这使得对巨型数据库的增量备份变得容易,例如您的iPhoto数据库只是一个捆绑包,因此您只需备份已更改的文件和新文件
然而,在Windows上,我认为这更难做,它看起来像一个目录“无论如何”(我确信聪明的人找到了一个解决方案,可以让资源管理器将某些目录视为单个文件,但这并不常见。)
从游戏开发人员的角度来看,你并没有处理如此小的文件,以至于磁盘空间开销是你非常关心的事情,所以我怀疑@ doublep的建议,因为它造成了这样的麻烦,但是如果用户要在某个地方复制整个游戏,那么使用单个文件会更容易,然后很容易检查整个集合是否正确。
当然,对于那些不应该访问它的人来说,更难阅读。但它也更难修改,这意味着更难修补,更难编写扩展。很多人使用扩展,更喜欢目录结构:模拟人生。
如果我是游戏开发者,我很乐意寻找个人档案。然后,我将使用捆绑包,因为我正在为Mac写作; - )
干杯
的Nik
答案 3 :(得分:0)
我可以想到多种原因。
正如双重建议的那样,文件在光盘上占用的空间超出了所需的空间。因此档案可以节省空间。 10k文件(任何大小)在打包存档时应该节省20MB。现在还不是很大的空间,但仍然如此。
我能想到的另一个原因是光盘碎片。我怀疑在碎片空间访问数千个单独的文件时,严重碎片的光盘性能会更差。但我不是这个领域的专家,所以如果有经验的人证实这一点,我会很感激。
最后,我认为这也可能与限制对单独游戏文件的访问有关。你可以暴露一堆Lua脚本,弄乱它们并破坏一些东西。或者你可以通过访问它来获得outro电影/声音/文本/暴露的任何东西。我也是这样做的:我使用多通道XOR密钥对图像进行加密,将文本文件和配置变量打包成一个整体文件(为了额外的安全性而压缩)并且只保留音乐可以自由访问。这样,游戏的秘密将在未经发现的情况下持续一段时间:)。
或者可能还有另一个我从未想过的原因:D。
答案 4 :(得分:0)
如你所知,游戏,特别是大公司试图尽可能多地挤压游戏。一种技术是将所有数据放在一个大文件中,然后将其DMA存储到内存中(将其视为从CD到RAM的memcpy)。由于所有文件都在一个较大的文件中,因此没有磁盘搜索,并且由于该技术,您可以快速加载大量文件(可能导致大量搜索)。