assets和res/raw的區別

在assets目錄文件和res目錄文件中,我們通常用來放置項目資源,比如圖片資源,音頻,切圖等。其中assets文件中長用來放置較大的音頻文件。回到題目來,assets和res/raw有什麼區別?

相同之處

兩者同屬於靜態文件,打包後會原封不動的保存在apk包中,不會被編譯成二進制,也就是不會被編譯到bin文件中。

不同之處

assets

assets目錄支持任意深度的子目錄。這些文件不會生成任何資源ID,必須使用/assets開始(不包含它)的相對路徑名。通常將資源先轉化成輸入流之後再進行讀取操作。因此對此類資源的訪問不同通過R.id.name的方式,而是通過專門的管理類AssetManager


    AssetManager am =  getAssets();  
    InputStream is = am.open("book.txt");
    //read the stream
    String s = read(is); 
/**
讀取流操作
*/
private String read(InputStream in) {
  BufferedReader br = null;
  StringBuffer sb = new StringBuffer();
  sb.append("");
  try {
   String str;
   //convert inputStream to reader
   br = new BufferedReader(new InputStreamReader(in, "GBK"));
   while ((str = br.readLine()) != null) {
    sb.append(str);
    sb.append("\n");
   }
  } catch (UnsupportedEncodingException e) {
   Toast.makeText(this, "文本編碼出現異常", 100).show();
   e.printStackTrace();
  } finally {
   try {
    if (in != null) {
     in.close();
    }
    if (br != null) {
     br.close();
    }
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

  }
  return sb.toString();
} 

res/raw

res/raw中的文件會被映射到R.java文件中,和其他res資源一樣,訪問的時候直接使用資源ID即R.id.name。除此之外,res/raw目錄不可以再嵌套其他的子目錄。對res/raw中的資源的獲取,我們也是需要先轉化成輸入流然後再進行讀取操作:

InputStream=getResources().openRawResource(R.raw.name);
發佈了36 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章