assets raw 目录简介

assets核心特性:不会被编译成二进制,支持子目录(可以分类,这是相对raw目录最大的好处),通过文件名访问,调用getAssets通过AssetManager访问
res/raw核心特性:会被映射到【R.java】文件中,通过资源的ID访问(访问方便,这是相对assets目录最大的好处),不会被编译成二进制,不支持子目录

assets 文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像 xml、 java 文件那样会被预编译。常用来存放一些图片、音频、html、js、css等文件。
如果你需要更灵活、自由的控制资源文件,那么【/assets】目录就是你的首选了。

assets 特点:
  • 目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。这一点和【res/raw】目录下的文件一致
  • 目录下的文件是通过完整文件名访问的(assets目录为根目录),访问的时候需要使用AssetManager管理类。而res目录下的资源文件都会被映射到【R.java】文件中,并且都是通过资源的ID访问的,如:R.raw.name,R.drawable.name,R.color.name等。这是和【res/raw】最大的区别。
  • 可以任意的建立子目录,而res目录中的资源文件是不能自行建立子目录的


关于存放文件的大小限制问题:
网上传言,assets和raw目录中不可以放超过1M(4M)的文件,否则会出问题。
但是实际上,我在assets和raw放一个10M+的音频用MediaPlayer播放时,都没有任何问题(可以完整播放)。
相反,我在assets和raw放一个1M-的音频用SoundPool播放时,都不能完全播放(只能播放十几秒,后面的全部丢失了)。
所以,我觉得不是assets和raw目录对文件大小做了限制,是你读取文件的API对流的大小做了限制从而导致文件不能被全部读取。

assets raw 目录下文件的访问示例

对于assets,这里访问的文件"data.txt"是"bqt"目录下的文件,而"bqt"目录是以assets为根目录的。
  1. InputStream in = getResources().getAssets().open("bqt/data.txt");
  2. InputStream in2 = getResources().openRawResource(R.raw.data);
  3. AssetFileDescriptor afd = getResources().getAssets().openFd("bqt/data.txt");
  4. AssetFileDescriptor afd2 = getResources().openRawResourceFd(R.raw.data);

AssetManager 简介【重要】

Provides access to an application's raw asset files; see Resources for the way most applications will want to retrieve their resource data. This class presents a lower-level API that allows you to open and read raw files that have been bundled with the application as a simple stream of bytes.
提供对应用程序的raw asset(原始资源)文件的访问;请参阅参考资料,了解大多数应用程序将要检索其资源数据的方式。 此类提供了一个较低级别的API,允许您打开并读取与应用程序绑定的、作为简单的字节流的原始文件。
  1. public final class AssetManager extends Object implements AutoCloseable

Constants:Mode for open(String, int)
  • int  ACCESS_BUFFER:Attempt to load contents into memory, for fast small reads. 尝试将内容加载到内存中,以实现快速读取。
  • int  ACCESS_RANDOM:Read chunks, and seek forward and backward. 读取块,向前和向后寻找。
  • int  ACCESS_STREAMING:Read sequentially, with an occasional forward seek.  顺序读取,偶尔前向搜索。
  • int  ACCESS_UNKNOWN:no specific information about how data will be accessed. 没有关于如何访问数据的具体信息。

open methods
  • final InputStream  open(String fileName)  Open an asset using ACCESS_STREAMING mode.
    • This provides access to files that have been bundled with an application as assets -- that is, files placed in to the "assets" directory. 这提供了将作为assets捆绑到应用程序的文件(即放置在“assets”目录中的文件)的访问方式。
    • String fileName: The name of the asset to open. This name can be hierarchical(分层的,按等级划分的;即:带目录). i.e., "docs/home.html".
  • final InputStream  open(String fileName, int accessMode)  Open an asset using an explicit access mode, returning an InputStream to read its contents.
  • final AssetFileDescriptor  openFd(String fileName)
  • final AssetFileDescriptor  openNonAssetFd(String fileName)
  • final AssetFileDescriptor  openNonAssetFd(int cookie, String fileName)  int cookie: Identifier(识别符) of the package to be opened.
  • final XmlResourceParser  openXmlResourceParser(String fileName)  Retrieve a parser for a compiled XML file.
  • final XmlResourceParser  openXmlResourceParser(int cookie, String fileName) Retrieve a parser for a compiled XML file.

other methods
  • void  close()  Close this asset manager.
  • final String[]  getLocales()  Get the locales that this asset manager contains data for.
    • On SDK 21 (Android 5.0: Lollipop) and above, Locale strings are valid BCP-47 language tags and can be parsed using forLanguageTag(String). 在SDK 21及以上版本中,区域设置字符串是有效的BCP-47语言标签,可以使用forLanguageTag(String)进行解析。
    • On SDK 20 (Android 4.4W: Kitkat for watches) and below, locale strings are of the form ll_CC where ll is a two letter language code, and CC is a two letter country code. 在SDK 20及以下版本中,语言环境字符串的形式为ll_CC,其中ll是双字母语言代码,CC是两个字母的国家代码。
  • final String[]  list(String path)  Return a String array of all the assets at the given path.
    • Returns:String[] Array of strings, one for each asset. These file names are relative to 'path'. You can open the file by concatenating 'path' and a name in the returned string (via File) and passing that to open().
    • 返回:String []字符串数组,每个asset一个。 这些文件名与“路径”相关。 您可以通过连接“path”和返回的字符串中的名称(通过File)打开文件,并将其传递给open()。

内部类:AssetManager.AssetInputStream
  1. public final class AssetManager.AssetInputStream extends InputStream 
2017-7-6

assets raw 资源 AssetManager的更多相关文章

  1. Android的xml/assets/raw资源使用具体解释

    一.assets/xml/raw资源介绍 1.assets资源文件夹:assets文件夹下存放的资源代表应用无法直接訪问的原生资源,这些文件将原封不动的存储到设备上,不会被编译为二进制形式,訪问方式是 ...

  2. Android 的assets文件资源与raw文件资源读取

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zpf8861/article/details/34504183   res/raw和assets的同 ...

  3. assets与res/raw资源目录的区别

    1.简介 assets和res/raw工程目录下都可以放一些小于1M的文件(2.3版本以前要求,否则将不能读出数据.),这些文件将被原样打包到APK中应用使用. 2.不同 assets目录下的文件将原 ...

  4. Android ndk下用AssetManager读取assets的资源

    转自:http://www.cppblog.com/johndragon/archive/2012/12/28/196754.html 在使用 cocos2dx 在 Android 上进行游戏开发时, ...

  5. Android中的asserts和res/raw资源目录

    1.assets目录 assets目录下称为原生文件,无法通过R资源清单类访问,这类文件在被打包成apk文件时是不会进行压缩的: (1)使用方法 AssetManager assets = this. ...

  6. Android 读取Assets中资源

    //读取文件 private static String getFromAssets(Context context, String fileName) { String result = " ...

  7. 读书笔记 effective c++ Item 15 在资源管理类中提供对原生(raw)资源的访问

    1.为什么需要访问资源管理类中的原生资源  资源管理类是很奇妙的.它们是防止资源泄漏的堡垒,没有资源泄漏发生是设计良好的系统的一个基本特征.在一个完美的世界中,你需要依赖这样的类来同资源进行交互,绝不 ...

  8. Android MediaPlayer播放raw资源封装类

    import android.content.Context; import android.media.MediaPlayer; import xxxx.R; public class MediaU ...

  9. 为什么angular library的build不能将assets静态资源打包进去(转)

    Versions Angular CLI: 6.0.7 Node: 9.3.0 OS: darwin x64 Angular: 6.0.3 ... animations, common, compil ...

随机推荐

  1. My blog in AI ---神经网络,神经元(neural network,nervecell)

    尽管我们有很多经验丰富的软件开发人员,但是利用hard code的方法,要解决一些问题,我们的程序员还是优点捉襟见肘,这些问题包括,识别手写数字照片上的数字:分辨一张彩色照片上是否有一只猫咪:准确理解 ...

  2. 那些年我们爬过的山 - mybatis批量导入

    [原创作品,转载请注明出处] 写这篇文章之前想着给这篇博客起一个文艺一点的标题,思来想去,想到了那些年我们爬过的山,或者我们一起趟过的河?代码不规范,同事两行泪,这是多么痛的领悟啊! 背景 本组一名实 ...

  3. Bzoj2164 采矿(线段树+树链剖分)

    题面 Bzoj 题解 对于每个节点,我们可以用树链剖分和线段树维护以下信息: 单独在某个点分配\(i\)个人的最大收益(可以\(O(m)\)计算) 分配\(i\)的最大收益(可以\(O(m^2)\)计 ...

  4. 2017 Idea 最简易破解 (无需jar包)(个人整理)

    首先 修改host文件: 文件路径:C:\Windows\System32\drivers\etc\hosts 修改:将“0.0.0.0 account.jetbrains.com”追加到hosts文 ...

  5. dSploitzANTI渗透教程之修改MAC地址与Wifi监听器

    dSploitzANTI渗透教程之修改MAC地址与Wifi监听器 dSploitzANTI基本配置 渗透测试是一种安全性较大的工作.所以,在实施渗透测试之前进行一些简单设置.如修改MAC地址.了解网络 ...

  6. 深入理解python中的select模块

    简介 Python中的select模块专注于I/O多路复用,提供了select  poll  epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kque ...

  7. 社会主义核心价值观js代码

    效果如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  8. bzoj 3926

    后缀自动机扩展到树形结构上. 先建出大的Trie,然后我们得到了一棵Trie树,对于树上的每个节点,保存一个后缀自动机从根走它代表的字符串后到达的节点,每次其儿子就从父亲的这个节点开始扩展. /*** ...

  9. 安装gitlab管理自己的代码

    安装gitlab的资料网上搜索很多,但发现很多都是比较老的资料了.我把我安装的过程记录一下,应该是最简单的过程了 1. 到 https://about.gitlab.com/downloads/ 下载 ...

  10. UVALive 4867 Maximum Square 贪心

    E - Maximum Square Time Limit:4500MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit ...