zoukankan      html  css  js  c++  java
  • Android中的asserts和res/raw资源目录*

    1、assets目录

    assets目录下称为原生文件,无法通过R资源清单类访问,这类文件在被打包成apk文件时是不会进行压缩的;

    (1)使用方法

    AssetManager assets = this.getResources().getAssets();
    ((TextView)findViewById(R.id.txAssets)).setText( readStream(assets.open("data.txt"))  );

    在context上下文中,调用getAssets返回一个AssetManager对象,然后使用open方法就可以访问需要的资源了,这里open方法是以assets目录为根的。

    assets目录更像一个附录类型的目录,Android不会为这个目录中的文件生成ID并保存在R类当中,因此它与Android中的一些类和方法兼容度更低。同时,由于你需要一个字符串路径来获取这个目录下的文件描述符,访问的速度会更慢。但是把一些文件放在这个目录下会使一些操作更加方便,比方说拷贝一个数据库文件到系统内存中。要注意的是,你无法在Android XML文件中引用到assets目录下的文件,只能通过AssetManager来访问这些文件。数据库文件和游戏数据等放在这个目录下是比较合适的。这个目录中的文件也不会被编译成二进制形式,可以自建目录。

    2、res目录

    res目录下这类文件在打包成apk文件时,可通过R资源清单类访问,会进行小内存优化。

    res/raw目录这里的文件会原封不动的存储到设备上,不会被编译为二进制形式,访问的方式通过R类。由于raw是Resources (res)的子目录,Android会自动的为这目录中的所有资源文件生成一个ID,这个ID会被存储在R类当中,作为一个文件的引用。这意味着这个资源文件可以很容易的被Android的类和方法访问到,甚至在Android XML文件中你也可以@raw/的形式引用到它。在Android中,使用ID是访问一个文件最快捷的方式。MP3和Ogg文件放在这个目录下是比较合适的。不可以有目录结构。

    (1)使用方法

    InputStream is =getResources().openRawResource(R.id.filename);
    
    try {
             ByteArrayOutputStream bo = new ByteArrayOutputStream();
             int i = is.read();
             while(i != -1) {
               bo.write(i);
               i = is.read();
             }
             return bo.toString();
    } catch (IOException e) {
             return "";
    }

    通过openRawResource(R.id.filename);方法获取一个指定id的输入流.

    还有一些其他文件夹:

    res/anim:这里存放的是动画资源。

    res/xml:可以在Activity中使用getResource().getXML()读取这里的资源文件,但是XML会被编译成二机制文件。

  • 相关阅读:
    php计算utf8字符串长度
    php和js字符串的acsii码函数
    快速排序的php实现
    bzoj 2822 [AHOI2012]树屋阶梯 卡特兰数
    bzoj 1485 [HNOI2009]有趣的数列 卡特兰数
    bzoj 4173 打表???
    bzoj [Noi2002]Savage 扩展欧几里得
    bzoj 3505 [Cqoi2014]数三角形 组合
    bzoj 2820 莫比乌斯反演
    Travel 并查集
  • 原文地址:https://www.cnblogs.com/chenxibobo/p/9644661.html
Copyright © 2011-2022 走看看