工作记录 - OBB的解决方案
之前关于OBB的内容:
自从用了Java来mount OBB, 再也没有遇到挂载的问题.
但最近在LG Nexus5 和LG G2上测试, 发现某个大约30K文件的文件, 一次性读取出来以后, 处理会报错.
最后排除各种因素, 比如为了排除buffer坏掉的因素,读的时候单独new一个新buffer,一次性读取,然后dump到sd卡.对比dump出的文件, 发现整个文件中间有n个字节(大约是32-64,没有数), 跟原文件不一样.
而用测试用例单独测试该文件时, 又没有出现问题. 而出问题的情况比较复杂, 已经连续读取了N个文件, 但是到这个文件,错误100%重现. 测试其他平台没有出现这样的问题. 感觉很恶心. StackOverflow上也有人遇到类似的问题,但是没有解决.
最后终于决定使用公司自己定义的格式,问题解决.
自己业余写的Blade引擎已经用了自定义的BPK格式. 而工作中由于很多因素, 所以自定义的方式一直没有采用. 现在用了公司自己定义的格式后, 更加可控, 如果问题也好修复. 至此, 总结一下当前native下使用obb的最佳方式.
使用android sdk自带的jobb (SDK的可选预置格式):
打包的限制: 用的FAT16, 有很多限制, 比如根目录512个entry, 单个文件512M限制, 整个包2G限制.而jobb的bug导致整个包不能超过512M,但网上可以找到修复代码.
runtime的问题, 第一个时native端mount不上, 用java之后解决. 然后是最近遇到的读文件坏数据问题.
总的来说, 做轻量级的小游戏或许不会遇到这么多的限制和问题, 但是个人仍然不建议使用系统内置的格式. 因为android的开放性,每个硬件厂商可以定制代码, 或许google的原系统有bug,其他厂商修复了.或许本身没有bug, 厂商开发过程中产生了新的bug, 这个在OpenGL ES 2.0上已经遇到了类似的问题, 各种设备的各种bug层出不穷.
1.对于有积累的公司, 可以尝试将原有的文件包系统移植过来, 如果现有系统本来就比较稳定, 那么移植的成本将会很低.
2.如果是刚起步的公司,手里没有稳定的文件包系统,但是没有时间和精力去自己写, 可以选择zip格式, 打包简单方便bug少, runtime有n多种库而且大多是开源的, 相对来说比较稳定. 这也是比较快的实现方式. 缺点是资源容易被破解, 即便简单加密了,相对来说还是好破解.
3.如果手头没有现成的文件系统包, 而有充足时间和精力, 可以考虑自己重写.
这么做最大的好处是更可控,不会被系统的API坑,各种莫名其妙的bug无法解决.即便自己实现的有了问题, 跟着代码调试也能很快修复,代码也会越来越稳定.
工作记录 - OBB的解决方案的更多相关文章
- [工作记录] Android OpenGL ES: non-square texture - continue
previous: [工作记录] Android OpenGL ES 2.0: square texture not supported on some device recently I found ...
- MySQL跨表更新字段 工作记录
工作中遇到两表查询,从user表中获取用户唯一id字段 写入到另外一张qiuzu表中的uid字段中; 二者可以关联起来的只有用户的手机号码tel字段; 了解需求后数据量稍多,不可能一个一个的手动修改 ...
- 最近的linux工作记录
最近的linux工作记录 最近公司走了一些同事,部分服务器交到了我的手里,总结一些常用的操作 注:大写的字符串一般是用来占位,需要替换 创建账户和使用密钥对登陆 1,账户系列 useradd 选项 用 ...
- Linux随笔 - linux 多个会话同时执行命令后history记录不全的解决方案【转载】
基本认识linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到~/.bash_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的. 问题场景 ...
- 工作记录--WPF自定义控件,实现一个可设置编辑模式的TextBox
原文:工作记录--WPF自定义控件,实现一个可设置编辑模式的TextBox 1. 背景 因为最近在使用wpf开发桌面端应用,在查看页面需要把TextBox和Combox等控件设置为只读的.原本是个很简 ...
- 图书馆管理系统程序+全套开发文档(系统计划书,系统使用说明,测试报告,UML分析与设计,工作记录)
图书馆管理系统程序+全套开发文档(系统计划书,系统使用说明,测试报告,UML分析与设计,工作记录): https://download.csdn.net/download/qq_39932172/11 ...
- 【Linux】 多个会话同时执行命令后history记录不全的解决方案
基本认识 linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到~/.bash_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的. 问题场 ...
- 国产mcu理论数据评估工作记录
目录 前言 简要工作记录 前言 时间:20210315 主要记录这两天对国内各IC厂商的 MCU 了解记录. 大环境,ST 厂商 MCU 疯狂涨价,国内 MCU 也越来越完善,还便宜.同时,全球缺晶圆 ...
- 工作记录[续] android OBB
前两篇在这里: Android上使用native IO 最近工作中的问题笔记 最近遇到的问题是, java.io.IOException: FAT Full StackOverflow的结果: htt ...
随机推荐
- OO Summary Ⅲ
规格化设计的发展历史 (这一部分并没有找到答案,于是参考了好黄和温莎莎的blogs) 1950年代,第一次分离,主程序和子程序的分离程序结构模型是树状模型,子程序可先于主程序编写.通过使用库函数来简化 ...
- win 10 初始环境变量
有时用户会修改Win10系统的环境变量,改到后面原来是什么的也记不得了,想要改回去还要去别的电脑查看,这里转载下Win10 64位环境变量的默认初始值. 附:打开环境变量方法:电脑左下右键——系统—— ...
- 线程安全的集合类、CopyOnWrite机制介绍(转)
看过并发编程的书,这两种机制都有所了解,但不扎实其实.看到别人的博客描述的很精辟,于是转过来,感谢! 原文链接:https://blog.csdn.net/yen_csdn/article/detai ...
- MAC开发配置--Node和Npm
前往Node官网下载最新的长期支持版本Node https://nodejs.org/zh-cn/download/ 默认安装目录为: • Node.js v10.14.2 to / ...
- shell中环境变量
Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量. 所以管理环境变量的文件也分为系统级和用户级的, ...
- C:基础知识
基础知识 一.基础转义字符 1.常用的转义字符 \n 回车换行 (10) \” 双引号 \t 横向跳格(9) \0 空字符(0) \v 竖向跳格 (11) \a 响铃(7) \b 退格 (8) \ ...
- shell开源跳板机sshstack
笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 源码地址: https://github.com/sshstack/sshstack 为什么要写shell跳板机? ...
- Python爬虫框架Scrapy实例(三)数据存储到MongoDB
Python爬虫框架Scrapy实例(三)数据存储到MongoDB任务目标:爬取豆瓣电影top250,将数据存储到MongoDB中. items.py文件复制代码# -*- coding: utf-8 ...
- Python数据分析库pandas基本操作
Python数据分析库pandas基本操作2017年02月20日 17:09:06 birdlove1987 阅读数:22631 标签: python 数据分析 pandas 更多 个人分类: Pyt ...
- SQL server类型转换
1. CAST函数 语法: CAST ( expression AS data_type [ ( length ) ] ) | | | |关键字 表达式或值 要转换成的数据类型 最大长度 示例: SE ...