C写文件
#include<stdio.h>
main(){
// java
// File file = new File("1.txt")
// 打开一个文件的c语言的函数
// sharedpreference db content.openoutput()
// 获取到文件的指针
FILE* fp = fopen("1.txt","wt");
char* str ="haha wirte file";
// fwrite方法接受4个参数
// 第一个参数 写什么内容
// 第二个参数 是一次 数据写多长
// 第三个参数 是写多少次
// 第四个参数 写到哪个文件里面
int len = fwrite(str,sizeof(char),15,fp);
printf("len =%d\n",len);
//释放文件句柄
fclose(fp);
system("pause");
}
c读文件
#include<stdio.h>
main(){
FILE* fp = fopen("1.txt","rt");
char arr[20]={};
//第一个参数 是读出来内容放在哪里
// 第二个 参数 一次读的数据的长度
// 第三个参数 读多少次
// 第四个参数 从哪个文件里面读
int read = fread(arr,sizeof(char),15,fp);
printf("arr = %s\n",arr);
printf("读了%d个char类型\n",read);
fclose(fp);//必须加入 否则会造成一直在占用这个文件
system("pause");
}
编写编码器应用的流程
1.明确需求
2.研究技术实现 如果没有做过 需要进行一定时间的调研,如果还不能ok 只能想办法绕过这个知识点实现需求
3.实施:
-1 研究c源码解码器的工作过程,找到核心代码 找到入口等
-2将核心代码放入jni然后编译 注意头文件的引入
-3测试
注意android需要在
LOCAL_SRC_FILES 描述中把所有的c文件都知名 可以做个 程序获取
这次老师代码有个不好的地方是没有吧解码器的代码进行封装 如果封装成一个方法 然后输入文件输出文件就可以了
另外
含有进度的进度条有两种 一种是真正计算出来的进度去 一种是估算出来的 会在99%哪里卡住.
进度条的实现
pd = new ProgressDialog(this);
pd.setMessage("转换中....");
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setMax(size); // 设置进度条的最大值
然后在c代码中调用用
public void setConvertProgress(int progress){
pd.setProgress(progress);
}
来实现pd的刷新
c代码
void publishJavaProgress(JNIEnv * env, jobject obj, jint progress) {
// 调用java代码 更新程序的进度条
// 1.找到java的LameActivity的class
// jclass (*FindClass)(JNIEnv*, const char*);
jclass clazz = (*env)->FindClass(env, "cn/itcast/lame/LameActivity");
if (clazz == 0) {
LOGI("can't find clazz");
}LOGI(" find clazz");
//2 找到class 里面的方法定义
// jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
jmethodID methodid = (*env)->GetMethodID(env, clazz, "setConvertProgress",
"(I)V");
if (methodid == 0) {
LOGI("can't find methodid");
}LOGI(" find methodid");
//3 .调用方法
// void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
(*env)->CallVoidMethod(env, obj, methodid, progress);
}
然后是使用exec方法执行bin文件这个自己在截屏那里已经用过 现在知道了是使用那个Sourcery G++ Lite Edition for ARM工具来交叉编译
但是这里老师执行bin文件后可以传出一个值
try {
//Process process = Runtime.getRuntime().exec("/data/data/hello");
Process process = Runtime.getRuntime().exec("date");
InputStream is = process.getInputStream();
DataInputStream dis = new DataInputStream(is);
String result ;
StringBuilder sb = new StringBuilder();
while((result = dis.readLine())!=null){
sb.append(result);
sb.append("\n");
}
System.out.println(sb.toString());
} catch (Exception e) {
e.printStackTrace();
}