[0]LayaNative中临时文件内容没有必要被写入到本地文件中吧

在LayaNative中,对于未出现在layadcc配置文件中的文件其没有chkSum,这种文件被称为"临时文件"。
对于临时文件来说,其下载完成后如果是图片类型或者其他被列为会被存储的文件类型时,下载内容会被保存到本地,对应代码为
//JCFileRes::onDownloaded方法中的updatecache块
updatecache:{
if (m_bExtVersion || (p_nChkSum != 0 && !chkErr)) {
//长期保存
std::string strLocalFile = pSvFileCache->updateAFile(m_nLocalFileID,
m_pBuffer.get(), p_Buff.m_nLen,
m_bExtVersion ? m_nExtVersionID : p_nChkSum,
m_bExtVersion,
0,0);
}
else if (_MaybeAnImg(p_Buff.m_pPtr, p_Buff.m_nLen) ||
_StrInVec(ext.c_str(), m_pMgr->m_vExtNeedSave) ||
chkErr ) {
//临时保存。进程内不允许删除
JCHttpHeader hh(pstrHeader.c_str());
//hh.getCacheContrl()
//TODO 计算过期时间
std::string strLocalFile = pSvFileCache->updateAFile(m_nLocalFileID,
m_pBuffer.get(), p_Buff.m_nLen,
0,
0,
0, 1);
}
}
上面的pSvFileCache->updateAFile方法被调用后会将文件内容写入到设备本地以文件形式进行保存,但目前看来这一步完全没有必要,因为这个文件在重启APP后就没用了。由于其不具备chkSum,因此在加载同路径文件时,该文件内容不会作为缓存内容被复用,可见代码:
//JCServerFileCache::__load方法
if (m_FileSys.load(pathfile.c_str(), p_bufRet, fs,tmModify)) {
//如果已经读取到了
if (fs.link) {
//资源包中的文件一定是要管理的。
FALSE_RET(_loadFromAssets(p_nFileID, p_bufRet, assetChk, p_nChkSum != 0), "Error! _loadFromAssets failed :file=x\n", p_nFileID);
FALSE_RET0((!p_nChkSum || assetChk == p_nChkSum), "Waring! _loadFromAssets returns incorrect contents! what happened!\n");
}
else {
if (!fs.ready) //如果还没下载下来
return false;
//如果是其他版本的不能使用
if (fs.version != CURCACHEFILEVER)
return false;
//不检查版本号的话,就成功了
if (!doCheckSum)
return true;

if (p_bUseVersion) {
return (fs.extVersionMgr && fs.chkSum == p_nChkSum);
}
else if (p_nChkSum) {
return (fs.chkSum == p_nChkSum);
}
//不走dcc和版本号的话。
switch (s_bSessionCacheType) {
case CT_AllwaysReload:
return false;
break;
case CT_UseHeaderInfo:
break;
case CT_ValidInCurProcess:
default:
//如果没有校验值,就是临时文件,通过时间来判断是不是新的(比管理器启动时间大就是新的)。
return tmModify >= m_tmCacheMgrCreateTime;
}
}
return true;
}
对于临时文件来说往往会进入到下方switch中的default语句中并return false,这样就表示缓存不可用需要重新下载。那么这样一来,我把临时文件存在设备上作用何在呢?如果是为了在当前APP运行周期内复用的话,有JCFileResManager.m_ResMap就够了吧?
一点个人疑惑,还请官方解答一下
已邀请:

S_eVent

赞同来自:

经官方人员解答,临时文件内容确实没有必要存入本地导致磁盘占用越来越大。因此,需要注释掉下面这个else if段落
//JCFileRes::onDownloaded方法中的updatecache块
updatecache:{
if (m_bExtVersion || (p_nChkSum != 0 && !chkErr)) {
//长期保存
std::string strLocalFile = pSvFileCache->updateAFile(m_nLocalFileID,
m_pBuffer.get(), p_Buff.m_nLen,
m_bExtVersion ? m_nExtVersionID : p_nChkSum,
m_bExtVersion,
0,0);
}
//注释掉,没用
//else if (_MaybeAnImg(p_Buff.m_pPtr, p_Buff.m_nLen) ||
//_StrInVec(ext.c_str(), m_pMgr->m_vExtNeedSave) ||
//chkErr ) {
//临时保存。进程内不允许删除
//JCHttpHeader hh(pstrHeader.c_str());
//hh.getCacheContrl()
//TODO 计算过期时间
//std::string strLocalFile = pSvFileCache->updateAFile(m_nLocalFileID,
// m_pBuffer.get(), p_Buff.m_nLen,
// 0,
// 0,
// 0, 1);
//}
}

要回复问题请先

商务合作
商务合作