工作记录 - 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 ...
随机推荐
- nginx:在linux上进行nginx的安装
-----1.安装 换源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载: wget ...
- IOCP IO完成端口
一. IO完成端口概念 IO完成端口的出现是为了解决并发模型中可运行线程上下文切换开销过大而出现的. 在<Windows核心编程>的描述中,IO完成端口是Wnidows系统提供的最复杂的内 ...
- Navicat for mysql的下载及破解
MySQL数据库是DOS界面的,使用起来要打命令,Navicat for MySQL基于Windows平台,为MySQL量身订作,提供类似于MsSQL的用户管理界面工具. 1.下载地址http://y ...
- jdbc中Class.forName(driverName)的作用
上次面试别人问我jdbc的过程: 我是这样回答的: Class.forName加载驱动 DriverManager.connect(url,username, password)获取连接对象 conn ...
- 国行 lg g3 D858 刷 lg g3 D858hk 教程(备忘)
纯手打,转载请注明出处~ 刷机有风险,出现问题概不负责! 本着自娱自乐的宗旨 ,分享一下,出了问题不负责! 准备的材料: 1,手机一枚(废话)国行lg g3 d858 2,root 工具 用来root ...
- springMvc 简单搭建
1.pom.xml 依赖引入 2.配置web.xml 3.配置 springMvc.xml 4.配置 logback.xml 5.编写 controller 测试 1.pom.xml 依赖引入 < ...
- netty源码理解(三) 从channel读取数据
下面的是ServerBootstrap 的内部类 ServerBootstrapAcceptor extends ChannelInboundHandlerAdapter 的方法 这里其实卡住了我很长 ...
- android-DNS服务找不到
1.重启eclipse 2.重新建立AVD 3.在建立AVD时sd卡数值不要填
- mysql检查-优化-分析
Mysql分析.检查.优化表 l 分析表 对表进行分析(分析关键字的分布, 分析存储MyISAM等表中键的分布) MySQL中使用ANALYZE TABLE语句来分析表,该语句的基本语法如下: mys ...
- Python pandas快速入门
Python pandas快速入门2017年03月14日 17:17:52 青盏 阅读数:14292 标签: python numpy 数据分析 更多 个人分类: machine learning 来 ...