NDK,在JNI层使用AssetManager读取文件
NDK,二进制文件数据读取,在JNI层,通过AAssetManager读取asset内部的资源:
需要头文件的支持
#include <android/asset_manager_jni.h>
#include <android/asset_manager.h>
,首先传个AssetManager到JNI层;
AssetManager assetManager = getAssets();
,将你的数据放到assets文件夹中,然后和对应的文件名字一起,通过JNI Native函数传递到JNI:
readFromAssets(assetManager, "yourdata.bin");
,然后在JNI的Native实现函数中读取:(也可直接在对应的C函数调用,调用方法类似fopen,fread) JNIEXPORT jstring JNICALL Java_com_lib_MyLib_readFromAssets(JNIEnv* env, jclass clazz,
jobject assetManager, jstring dataFileName) { AAssetManager* mManeger = AAssetManager_fromJava(env, assetManager);
jboolean iscopy;
const char *dataFile = env->GetStringUTFChars(dataFileName, &iscopy); int c = dataRead(mManeger, dataFile); //call the C function env->ReleaseStringUTFChars(dataFileName, dataFile); jstring resultStr;
resultStr = env->NewStringUTF("success");
return resultStr;
}
int dataRead(AAssetManager* mManeger, const char *dataFile){ AAsset* dataAsset = AAssetManager_open(mManeger, dataFile, AASSET_MODE_UNKNOWN);//get file read AAsset
off_t dataBufferSize = AAsset_getLength(dataAsset); int num = dataBufferSize/sizeof(float); //float *data = (float*) malloc(num * sizeof(float)); //allocate the data, the same with the later line
float *data = (float*) malloc(dataBufferSize); int numBytesRead = AAsset_read(dataAsset, data, dataBufferSize); //begin to read data once time
//note: numBytesRead is the total bytes, then num = dataBufferSize/sizeof(float) = numBytesRead/sizeof(float)
if (numBytesRead<) {
LOGI("read data failed");
}
else{
LOGI("numBytesRead: %d", numBytesRead);
} //int numBytesRead;
//for (int i = 0; i < num; i++) {
// numBytesRead = AAsset_read(dataAsset, (char*) (&data[i]), sizeof(float)); //or read the data one by one
// if (numBytesRead<0) {
// LOGI("read data failed");
// }
// else{
// LOGI("numBytesRead: %d", numBytesRead);
// }
//} AAsset_close(dataAsset);
free(data); return ;
}
NDK,在JNI层使用AssetManager读取文件的更多相关文章
- 基于Eclipse的Android JNI层測试应用开发过程记录
前言 本文记录一个Java层与JNI层參数与数据交互的应用程序开发过程.为实现一个功能完整的带Java与JNI的应用程序打下基础. 本文如果读者已搭建好Android的Eclipse与NDK开发环境, ...
- Android的NDK开发(5)————Android JNI层实现文件的read、write与seek操作
1. 在Android的Java层实现文件的读写操作是非常简单的,可以参看之前写的博文:http://blog.csdn.net/conowen/article/details/7296121 在JN ...
- [ 转载 ] Android JNI(一)——NDK与JNI基础
Android JNI(一)——NDK与JNI基础 隔壁老李头 关注 4.4 2018.05.09 17:15* 字数 5481 阅读 11468评论 8喜欢 140 本系列文章如下: Androi ...
- Android JNI(一)——NDK与JNI基础
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- [转]Android通过NDK调用JNI,使用opencv做本地c++代码开发配置方法
原文地址:http://blog.csdn.net/watkinsong/article/details/9849973 有一种方式不需要自己配置所有的Sun JDK, Android SDK以及ND ...
- Android从assets目录下读取文件相关
有一个需求是app的帮助文档是word格式,ios可以直接用webview加载word显示,Android不行.而美工不配合转换成图片,前端没时间把word写成html 没办法,自己搞. 步骤: 1. ...
- Jni层回调java代码【转】
本文转载自:http://www.linuxidc.com/Linux/2014-03/97562.htm JNI是Java Native Interface的缩写,是Java平台的重要特性,使得Ja ...
- NDK与JNI
什么是NDK(android native develop kits) :android 本地开发工具集,可以把c/c++编译成一个linux下可以执行的二进制文件 java代码里面就可以通过jni ...
- android 从assets和res中读取文件
1. 相关文件夹介绍 在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的.assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译, ...
随机推荐
- C# SendMail 发送邮件
最近因为用的发送邮件的地方,就查询了资料,总结以下几个方法 1.利用新浪邮箱发送 2.利用公司邮箱发送 3.利用CDO发送,这种方式要引用Interop.ADODB.dll(http://www.no ...
- 倍福TwinCAT(贝福Beckhoff)应用教程13.3 TwinCAT控制松下伺服 NC配合完整上位
这是TwinCAT教程的最后一节,简单讲述了以C#为上位,通过ADS控制TwinCAT下位,实现完整控制两轴模组的功能.可以发现,在上位层已经没有了运动控制的代码,不管是要执行哪种运动,无非是把目标参 ...
- 使用Vmware虚拟机部署Swift开发环境之Mac OSX系统安装
一.使用VMware虚拟机部署Swift开发环境所需工具: Vmware Workstation 10.0虚拟机软件VM安装Mac解锁工具Unlock苹果操作系统(Mac OS X Mavericks ...
- IFrame和Ajax比較
说到比較,可能我是须要把这连个东西都给大家介绍一下的,可是介于大家都已经有了非常多的理解.我就简单的说了. Ajax: 是指一种创建交互式网页应用的网页开发技术.主要是利用Xm ...
- 电脑 F键(功能键)的具体作用
F1:如果你处在一个选定的程序中而需要帮助,那么请按下F1.如果现在不是处在任何程序中,而是处在资源管理器或桌面,那么按下F1就会出现Windows的帮助程序.如果你正在对某个程序进行操作,而想得到W ...
- 转MQTT SERVER 性能测试报告
硬件环境: 内存4G CPU4核 SERVER及端口: apollo端口 61619 mosquitto:端口 1884 activeMQ端口:1883 emqtt 端口1885 测试方法 并发测试: ...
- 查看、修改linux系统的最大链接数限制、文件描述符限制、端口范围限制、虚拟内存等
一.修改最大连接数 1.查看当前文件描述符的限制数目的命令: ulimit -n 2.修改文件描述符的限制数目 2.1 临时改变当前会话: ulimit -n 65536 2.2 永久变更需要下面两个 ...
- PullToRefresh使用详解(一)--构建下拉刷新的listView
前言:前几天写了篇关于PullToRefresh控件的DEMO导入的博客,但由于当时没有用到,所以就没细往下讲,现在开始到了实战阶段,用到了PullToRefresh的listView样式,网上有讲的 ...
- sql中的笛卡尔积
sql中的笛卡尔积 我们对数据库表进行操作时,经常会对多张表进行关联,多表连接查询大家肯定不会陌生,但是一不小心很容易出来庞大冗余的数据. 笛卡尔积数学概念 笛卡尔积是指在数学中,两个集合X和Y的笛卡 ...
- Spring mvc 注解@ResponseBody 返回内容编码问题
@ResponseBody 在@Controller 类方法中能够让字符串直接返回内容. 其返回处理的类是org.springframework.http.converter.StringHttpMe ...