Android刷题日记3-资源文件夹assets和raw

339 阅读3分钟

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

一、题目描述:

下面对于 Android 项目工程下的 assets 和 raw 目录描述错误的是()

  •   A.assets 和 raw 目录都可以放置多媒体数据文件
    
  •   B.两个目录下的资源会映射到 R 文件下,生成可引用的资源 ID
    
  •   C.assets 目录下可自定义目录结构,raw下不可以
    
  •   D.两者目录下的文件打包后会原封不动的保存在 apk 包中,不会被编译成二进制
    

二、思路分析:

A.assets 和 raw 目录都可以放置多媒体数据文件

官方文档:可以存放需以原始形式保存的任意文件,所以A是对的。

B.两个目录下的资源会映射到 R 文件下,生成可引用的资源 ID

res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。

1.读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作

InputStream is =getResources().openRawResource(R.raw.filename); 

2.读取assets下的文件资源,通过以下方式获取输入流来进行写操作

AssetManager am = getAssets(); 
InputStream is = am.open("filename");

B是错的

C.assets 目录下可自定义目录结构,raw下不可以

res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹

C是对的

D.两者目录下的文件打包后会原封不动的保存在 apk 包中,不会被编译成二进制

当我们把一个apk文件以zip的形式进行解压,得到其中的文件,我们找到其中的一个布局文件,使用文本软件查看,会看到一堆乱码。这是为什么呢?

因为Android工程在构建的过程中,把类型为res/animator、res/anim、res/color、res/drawable(非Bitmap文件,即非.png、.9.png、.jpg、.gif文件)、res/layout、res/menu、res/values和res/xml的资源文件均会从文本格式的XML文件编译成二进制格式的XML文件。

  • 二进制格式的XML文件占用空间更小。这是由于所有XML元素的标签、属性名称、属性值和内容所涉及到的字符串都会被统一收集到一个字符串资源池中去,并且会去重。有了这个字符串资源池,原来使用字符串的地方就会被替换成一个索引到字符串资源池的整数值,从而可以减少文件的大小。
  • 二进制格式的XML文件解析速度更快。这是由于二进制格式的XML元素里面不再包含有字符串值,因此就避免了进行字符串解析,从而提高速度。

而res/raw下和assets目录下的都会保留原始文件,不会被编译成二进制。D是对的。

三、总结

所以这题选B