首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UE4 文件系统

类图

类图

IPlatformFile

文件类的最基础接口,定义了对文件进行操作相关的方法,从这个接口派生的类又分为两大类:

物理文件类

这个就是我们通常理解的文件类,就是各个平台下直接对文件进行操作的类

包装()文件类

这个类型的文件类不会直接对文件进行操作,它对文件的操作是通过自己持有的底层对象进行的,最终各个类型的包装文件类会构成一个文件操作链,这个链上的最后一个对象就是物理文件类对象

这个类型的子类实现中都会有个 类型的成员变量,这个其实就是类似我们链表数据结构中的 指针对象,指向链表的下一个对象。不过不明白这里为什么不抽象一个类似 的接口,把这个成员变量放到这个基类接口里,省得每个子类里都得写一遍

这个类需要注意一下这些接口:

: 初始化接口,对于包装文件类来说,第一个参数是他所指向的下一个文件类对象。对于物理文件类,第一个参数只能是空的; 第二个参数是命令行,部分文件类会从这里去解析一些参数

: 这个接口直接返回当前平台对应的物理文件类对象,这个函数的实现在各个平台的物理文件类封装中。一般我们通过 返回的是文件操作链的链头。

: 每个包装文件类是否生效的逻辑在这里实现

物理文件类: IPhysicalPlatformFile

这个类是物理文件类的基础接口,主要对 这个接口进行屏蔽,因为物理文件类对象肯定是文件操作链上的最后一个对象,所以这个接口是不让用的

FLinuxPlatformFile

对 平台的文件操作进行封装

FWindowsPlatformFile

对 平台的文件操作进行封装

FHTML5PlatformFile

对 平台的文件操作进行封装

IAndroidPlatformFile/FAndroidPlatformFile

: 这个类也是个接口类,主要是扩展了几个 平台上的接口

: 继承自 ,对 平台的文件操作进行封装

FApplePlatformFile/FIOSPlatformFile

: 对 平台的文件操作进行封装

: 继承自 ,对 平台的文件操作进行封装

包装文件类

入口函数

FCachedReadPlatformFile

这个包装文件类实现了预读的优化,具体文件的预读逻辑在文件读写类 中,简单说就是假如读一个文件,读100字节,经过这个类的包装,其实是会读最多64KB的文件内容到内存中,下次再读这个文件时其实就是内存拷贝

FLoggedPlatformFile

这个类会将每一次文件操作的耗时打印到 中,并且输入命令 会将当前打开的文件列表打印到 中

FPlatformFileOpenLog

记录游戏或者编辑器的读文件历史,结果保存到 或者 中

不能用在 版本中

FNetworkPlatformFile/FCookedIterativeNetworkFile/FStreamingNetworkPlatformFile

这几个包装器会从服务器上下载文件,比如打开某个文件,这个文件如果不存在,则先会从文件服务器上把这个文件下载到本地,然后再打开

优先级是 > >

不能用在 版本中

FSandboxPlatformFile

如果启用了沙盒,那么操作的文件将会转到沙盒内的文件访问

注意这个函数 里面有两个列表,一个是文件夹匹配列表,一个是文件匹配列表,不在这个列表中文件或者文件夹,在沙盒访问失败后,还会用原始路径访问一次

FPakPlatformFile

这个包装类很重要, 因为这个就是虚幻中对 文件的读取封装了,了解虚幻中怎么读取 文件,可以详细阅读这个类的实现

,这个函数控制当从 中访问文件失败时,是否继续让底层文件类直接访问目标路径

猜想: 这个是不是可以用来做一件事,比如某些资源不打包到 中,然后游戏开始的加载环节中,把这些资源动态地下载下来

测试

先按正常流程打包游戏, 目录如图

然后从另一个游戏工程里复制了一个 好的特效资源,然后放到 目录下,如图

然后在代码里直接加载测试资源

测试结果如下图:

FPlatformFileReadStats

文件读取速度统计

FProfiledPlatformFile

文件操作速度统计,类似

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180420G1CY0D00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券