今天遇到一个需求,就是将一个zip文件读入内存进行处理。当然也可以是普通文件。
例如将sdcard/..../aaa.zip读入 char *的变量中。
jstring native_calculateSearchTime(JNIEnv *env, jobject obj,jstring assetsZipFileName, jstring txtFilePath) {
char *iBuf = NULL;
size_t len = 0;
int ret = -1;
char *fileName = (char *) (*env)->GetStringUTFChars(env, assetsZipFileName, 0);
char *txtPath = (char *) (*env)->GetStringUTFChars(env, txtFilePath, 0);
//--------------------------读取文件---------------------------
FILE *fd;
fd = fopen(fileName, "rw");
//--------------------------计算文件大小------------------------
ftell(fd);
jlong curpos;
//记录首地址
curpos = ftell(fd);
//移动到文件末尾
fseek(fd, 0L, SEEK_END);
//获取到首部的偏移,即为文件长度。
len = ftell(fd);
//返回首地址
fseek(fd, curpos, SEEK_SET);
//--------------------------读入缓冲区------------------------
iBuf = (char *) malloc(len);//申请内存大小
ret = fread(iBuf, sizeof(char), len, fd);
fclose(fd);
//其他业务操作
}