由於C語言更適於操作硬體,且在一些處理檔案的操作上效率比較高,所以在類似操作一般使用JNI調用C代碼進行操作: 比如音頻,視頻以及映像的處理:
具體如音頻格式的轉碼器,類似於photo關於圖片效果的渲染等應用中,需要大量應用JNI.
在此回顧下C語言操作檔案的內容:
C檔案的操作模式:
“rt” 唯讀開啟一個文字檔,只允許讀資料
“wt” 唯寫開啟或建立一個文字檔,只允許寫資料
“at” 追加開啟一個文字檔,並在檔案末尾寫資料
“rb” 唯讀開啟一個二進位檔案,只允許讀資料
“wb” 唯寫開啟或建立一個二進位檔案,只允許寫資料
“ab” 追加開啟一個二進位檔案,並在檔案末尾寫資料
“rt+” 讀寫開啟一個文字檔,允許讀和寫
“wt+” 讀寫開啟或建立一個文字檔,允許讀寫
“at+” 讀寫開啟一個文字檔,允許讀,或在檔案末追加資料
“rb+” 讀寫開啟一個二進位檔案,允許讀和寫
“wb+” 讀寫開啟或建立一個二進位檔案,允許讀和寫
“ab+” 讀寫開啟一個二進位檔案,允許讀,或在檔案末追加資料
對於檔案使用方式有以下幾點說明:
檔案使用方式由r,w,a,t,b,+六個字元拼成,各字元的含義是:
r(read): 讀
w(write): 寫
a(append): 追加
t(text): 文字檔,可省略不寫
b(banary): 二進位檔案
C語言之檔案的寫入:
//java File file = new File(); ->c開啟一個檔案
// fos = FileOutPutstrem(file) ->c得到檔案的輸出資料流 int len = fos.write() //寫了多長的資料
// fos.write(); -c寫檔案. fos.flush();
#include<stdio.h>
main(){
//FILE * fopen(char * filename, char * type);
//SharedPreference WORLD_READABLE WORLD_WRITEABLE APPEND PRIVATE
FILE* fp = fopen("1.txt","wt");
//int fwrite(void* ptr, int size, int nitems, FILE *stream);
//傳回值 int 代表的是成功的寫了多少次的資料.
// void* ptr 要寫到檔案的資料 可以char* int*
// size 一次寫的資料的長度.
// nitems 代表的是寫多少次
// stream 寫到那一個檔案裡面.
char* str="hello";
int result = fwrite(str,sizeof(char),5,fp);
printf("寫了%d次\n",result);
//一定要調用.如果不調用 就會導致這個檔案被佔用.
fclose(fp);
system("pause");
}
C語言之讀取檔案:
#include<stdio.h>
main(){
//FILE * fopen(char * filename, char * type);
//SharedPreference WORLD_READABLE WORLD_WRITEABLE APPEND PRIVATE
FILE* fp = fopen("1.txt","rt");
// int fread(void *ptr, int size, int nitems, FILE *stream);
//傳回值 int 代表真的讀取了多少次 size的長度
//*ptr 資料讀到哪個記憶體空間裡面
// size 一次讀取的資料的長度是多個位元組
// nitmes讀取多少次資料
// stream 從哪個檔案裡面讀
char* str =(char*) malloc(sizeof(char)*10); //分配記憶體
int read = fread(str, sizeof(char),5,fp);
printf("讀了%d次\n",read);
printf("str=%s\n",str);
free(str); //手動釋放分配的記憶體
fclose(fp);//關閉流
system("pause");
}
#include <stdlib.h>
#include <stdio.h>
C語言中的隨機數函數:
使用rand()函數需要匯入stdlib.h,stdio.h兩個標頭檔
#include <stdlib.h>
#include <stdio.h>
int getPressure(){
//底層c的實現代碼,內部工作的原理可能非常複雜,我們不關心他.
//關心 方法的方法名 參數 還有傳回值
return rand()%300; //0~300
}