- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
假设有一款游戏包含很多内容,例如汽车模型。我不想为了节省内存而一直将它们放在 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/
我尝试将resteasy与自定义对象一起使用,当我创建jar文件时,它与intellij IDE一起工作正常,但失败并出现以下异常 org.jboss.resteasy.core.NoMessageB
我正在寻找一种在easy-close选项为TRUE时基于Shiny模态关闭触发事件的方法(因此,在模态外部单击将其关闭)。由于没有链接到模式的ID,因此我似乎无法捕获此事件。我尝试在“观察”事件中包装
假设我有一些定义如下的类: class Security { Boolean AuthenticateUser(String username, String password); B
正如标题所说,Coq 可以用作模型检查器吗?我可以将模型检查与 Coq 证明混合使用吗?这是常态吗?谷歌谈论“微积分”,有没有人有这方面的经验或类似的经验?是否建议以这种方式使用 Coq,或者我应该寻
是否有一种方法(设置或快捷方式)可以显示输出超过 500 行的查询的总行数 - 即,无需修改首选项中的“结果集页面大小”值?我本质上是在寻找 select count(*) from () t 的输出
我想这样做: System.out.println("안녕하세요!"); 但是当我尝试在 Eclipse 中进行编译时,出现“某些字符无法使用 MacRoman 字符编码进行编码”弹出式错误消息。我正
如果我有一个用这样的字符串初始化的框架 setter CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(at
所以这里没有什么新内容,我只是想得到一些澄清,但似乎在其他帖子中找不到任何澄清。 我正在安静地创建一个新资源,例如: /books (POST) 有一个 body : { title: 'The
我有很多预处理器宏定义,如下所示: #define FOO 1 #define BAR 2 #define BAZ 3 在实际应用中,每个定义对应一个解释器虚拟机中的一条指令。宏的编号也不是连续的,以
使用 SpriteKit 开发 iOS 游戏。我的背景由 map block 组成(本质上是无限 map ,程序生成)。 我们的系统旨在管理 map 的“ block ”,我们只加载玩家附近的 blo
我需要在 Ruby 中拆分一个具有以下格式的字符串: [{a:1,b:2,c:3,d:4},{a:5,b:6,c:7,d:8},{a:9,b:10,c:11,d:12},{a:13,b:14,c:1
Linq 有一个名为 Take() 的便捷运算符方法,可以返回任何实现 IEnumerable 的元素中给定数量的元素。 jQuery 中是否有类似的东西可以处理数组? 或者,换个方式问:如何在 Ja
每当我使用以下代码在文档中插入图像时, var cursor = DocumentApp.getActiveDocument().getCursor(); var image = cursor
今天看到这样一段代码: if ( not defined($reply_address) or not defined($from_name) or not defined(
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
刚刚了解 mercurial 的 --style和 --template可用于 hg log 的选项和 hg tip我发现它们非常有帮助,但我不知道把我的“样式文件”放在哪里 我有一个“样式文件”,它
是否有一些应用程序可以自动 bundle (并缩小)包含 require('file.js') 调用的 JS 项目?这样它们就会合并并生成一个文件。 具体来说,我正在谈论when.js ,一个带有大量
如何(轻松)获取 Sublime Text 3 中的当前文件路径 我不经常使用 ST 控制台(我只使用它一次来安装包管理器),但我认为这可能是一个好方法: 像某种pwd命令一样获取当前文件路径。 但这
嗨,我正在使用resteasy api,我需要使用Map作为QueryParam。我可以使用列表作为 QueryParam,但是当我尝试传递 Map 时,我收到下面提到的错误。 这是我的服务代码 @G
假设我有一个 C++ 代码(请参阅下面的简单示例)。我想让期刊审稿人轻松安装/运行 所以我认为最简单的方法是将其变形为简化的类 R 包的 tar.gz 文件,以便裁判可以安装它通过简单地调用 inst
我是一名优秀的程序员,十分优秀!