jni对超过2G的大文件的处理,不过不成功
来源:互联网 发布:centos rm rf 恢复 编辑:程序博客网 时间:2024/04/30 10:02
加密一个文件,加密算法使用的是android自带的AES算法,从源码中提取出来即可。
希望将加密和文件处理的模块封装在so中,前前后后耗时不少,总算完成,加密流程不在这里阐述。这里记录下当时出现的一个问题。
测试的时候,发现只要是大视频进行加密后,总是出现加密再解密数据无法恢复的情况,证明了加密就是不正确。经过查验,发现是,只要是超过了2G的文件就必定会出现这种情况。当时就怀疑,为什么是2G?这么个凑巧的数字,猜测是因为系统是32位的原因,网上查查证明的猜测也木有错。
具体原因出现在fseek函数中,超过2G的文件的话,使用fseek来定位到END,必定是返回-1的失败值。问题就出在这里。
使用fseeko函数来替代fseek的使用,关于fseeko函数说明,可以看链接:
大文件处理
里面有介绍。
事实上在实验fseeko的时候,仍然会出现该问题,fseeko函数里面的偏移量参数是类型off_t默认仍然是32bit,和int一样,所以实际上fseeko的效果和fseek是一样的,所以这里我们主要要做的事情就是将off_t设置为64位。修改方法:
直接在 .cpp中定义 #define _FILE_OFFSET_BITS 64 恩,是木有用的,网上到处在介绍这种说法,但是直接再jni代码中这样设置,完全木有作用。感觉是肯定在android.mk中进行配置才可以。
在android.mk中添加了 LOCAL_CFLAGS += -D_FILE_OFFSET_BITS=64
仍然没有用。fseeko执行还是无法定位到超过2G的地址。
不知如何解决.................
原因找到了,为什么以上修改方法木有用呢?因为:
android不支持64位off_set
好吧,那么,要用lseek64的话,又要修改代码,算了,放弃。
- jni对超过2G的大文件的处理,不过不成功
- linux下编译程序使其处理超过2G的大文件
- 获取文件大小,尤其是超过2G的大文件
- linux环境下读写超过2G的大文件
- linux c 读写超过2G的大文件解决办法
- win32读取超过2G大文件的解决办法
- 处理超过 2G 的 DBF 表
- 处理超过 2G 的 DBF 表
- 在Linux下处理超过2GB的大文件
- linux下使用stat函数不可以取得超过2G的大文件的解决方法
- linux解压超过2G大文件
- Ubuntu解压超过2G大文件
- MFC,大文件(超过2G)获取文件大小的bug
- 关于获得文件超过2G,超过4G文件大小的方法
- Outlook容量超过2G的处理办法
- Aix 下打开超过2G的文件
- Toolbox中ls不支持超过2G文件的问题
- linux 下超过2G大文件监控
- Ubuntu 恢复默认顶部/底部 面板
- Web 在IIS7下部署,局域网远端无法访问
- Ant入门基础教程
- 关于<meta>标签的开闭 HTML 与 XHTML 之间的差异
- 第七周项目4撞错体验
- jni对超过2G的大文件的处理,不过不成功
- 最受欢迎的电影网站前15名(2014年10月)
- cocos编译出错大全集
- quick-cocos2d-x cookie每次都改变的问题
- 算法导论中求解时间复杂度的三种方法
- CSS渐变色
- 分布式版本控制系统Git学习资源收集汇总(附Github个人简历自动生成)
- Nginx 实现本地静态文件内存缓存
- Android 选择图片 拍照 并编辑图片