gpt4 book ai didi

c# - 快速轻松地从一个文件加载所需内容?

转载 作者:可可西里 更新时间:2023-11-01 11:32:37 24 4
gpt4 key购买 nike

假设有一款游戏包含很多内容,例如汽车模型。我不想为了节省内存而一直将它们放在 RAM 中,而只想在需要时才加载它们。如果每辆车有一个文件,这会很容易 - 但最后我会有这么多文件,项目将变得难以共享等等。

但是当我将所有内容都存储到一个文件中时,我不知道它在哪里。有没有一种方法可以将所有内容存储到一个文件中并像我为每个内容条目执行一个文件一样轻松地导航到内容?我唯一能想到的就是将字节位置保存在第二个文件中(或作为内容文件中的标题),但我对该解决方案非常不确定。

最佳答案

一个简单的方法是在编写文件时跟踪(在内存中)内容所在的位置。然后,在文件末尾写一个索引。所以你的文件看起来像这样:

offset 0: data for object 1
offset 0x0473: data for object 2
offset 0x1034: data for object 3
etc.

您可以使用 BinaryWriter 编写此文件.在你写每个对象之前,你查询 writer.BaseStream.Position获取文件的当前位置。您将该信息保存在内存中(仅对象名称及其位置)。

写完所有对象后,保存当前位置:

indexPosition = writer.BaseStream.Position;

然后在文件末尾写入索引:

name: "object 1", position: 0
name: "object 2", position: 0x0473
etc.

写一个空的索引条目来表示对象的结束:

name: "", position: 0xFFFFFFFF

你做的最后一件事是在文件末尾写入索引位置:

writer.Write(indexPosition);

现在,您可以使用 BinaryReader 打开文件.查找文件末尾减 8 个字节,读取那里的长整数。这给了你索引的位置。查找索引并开始向前读取索引条目,直到找到位置为 0xFFFFFFFF 的条目。

您现在在内存中有了索引。您可以创建一个 Dictionary<string, long>这样,给定一个对象名称,您就可以找到它在文件中的位置。获取位置,寻找那里,并读取对象。

当我们在 90 年代后期编写游戏时,这种事情很常见。您仍然可以这样做,尽管使用简单的数据库可能会更好。

关于c# - 快速轻松地从一个文件加载所需内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17707881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com