关闭

Android res/raw文件以及raw与res/assets异同

标签: android
1647人阅读 评论(1) 收藏 举报
分类:


Android res/raw文件以及raw与res/assets异同

通常,如果Android开发者有些文件比如音频,视频,.html,.mp3等等这些文件不希望编译器编译而保持原始原貌打包进apk文件(这在游戏开发中很常见和普遍,如游戏用到的游戏音乐、图等资源),那么可以使用Android在res目录下的res/raw和res/assets来保存。res/raw和res/assets目录下的文件将不被Android编译成二进制,Android将这些文件资源保持原状原封不动的打包进最终编译发布时候的apk文件。
res/raw和res/assets和既有相同点也有不同点。
(1)res/raw目录下的文件将被Android映射成R.id.xxx资源,访问该raw目录下的文件资源,可以通过R.id.filename获得映射,进而文件操作。但res/assets则不是这样,res/assets目录下的文件不会进行R.id. filename这样的映射,res/assets目录下的文件存放和访问模型与Java文件系统的读写模型类似。
(2)res/assets目录下的文件结构可以出现层级和树形结构;而res/raw则不能分层级。换句话说,可以在res/assets建立多层级、树形的文件目录结构,而res/raw下的文件资源必须平铺放在res/raw目录下。
(3)文件大小方面。在res/raw目录下的单个文件大小可以大到若干MB的尺寸,但res/assets文件目录下的单个文件大小尺寸尽量控制在MB量级以下,否则可能要出问题。
(4)res/assets目录下的文件资源访问一般是这样(如附录文章1所示):
AssetManager am=getAssets(); 
InputStream is=am.open("filename"); 
即通过AssetManager访问res/assets目录下资源。
res/raw目录下的文件资源访问一般是这样:
InputStream is =getResources().openRawResource(R.id.filename);
res/raw目录下的文件资源也可以通过这样先获得URI定位:
Uri uri= Uri.parse("android.resource://"+getPackageName()+"/"+ R.raw.filename);

(5)res/raw和res/assets目录下文件为只读。

给出一个读取raw数据的例子。

事先现在res目录下新建一个目录raw,然后在里面新建一个名为:zhangphil.txt的文件,该文件只有一行简单的字符串,注意编码格式是UTF-8,如图:



然后写Java代码:

package zhangphil.raw;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// setContentView(R.layout.activity_main);

		readRaw();
	}

	private void readRaw() {
		InputStream is = getResources().openRawResource(R.raw.zhangphil);

		try {
			byte[] buffer = readByteDataFromInputStream(is);
			String s = new String(buffer, 0, buffer.length, "UTF-8");
			Log.d("读取到的raw数据", s);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private byte[] readByteDataFromInputStream(InputStream is) throws IOException {
		BufferedInputStream bis = new BufferedInputStream(is);

		ByteArrayOutputStream baos = new ByteArrayOutputStream();

		final int BUFFER_SIZE = 2 * 1024;
		final int EOF = -1;

		int c;
		byte[] buf = new byte[BUFFER_SIZE];

		while (true) {
			c = bis.read(buf);
			if (c == EOF)
				break;

			baos.write(buf, 0, c);
		}

		is.close();

		byte[] data = baos.toByteArray();
		baos.flush();

		return data;
	}
}


代码运行结果输出:



附录我写的相关参考文章:
【文章1】《Android读取assets目录下文件数据内容》链接地址:http://blog.csdn.net/zhangphil/article/details/48247541

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

【安卓笔记】res/raw与assets区别

相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。 2.assets目录下可以新建目录,而res/raw目录则不可以。 不同点: 1.由于...
  • RowandJJ
  • RowandJJ
  • 2014-02-13 10:49
  • 2730

Android问题之res/raw和assets的区别及文件大小限制

*res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。 *res/raw和assets的不同点: 1.res/raw...
  • android_xiaozhou
  • android_xiaozhou
  • 2014-04-05 21:27
  • 3623

android工程下assets与raw文件夹的区别

在android应用的开发中,当我们建一个新的工程后,我们会发现工程中包含了一个目录assets,工程的资源目录下会有一个raw目录(res/raw)。一,相同点:assets和res/raw工程目录...
  • qq_30098019
  • qq_30098019
  • 2016-05-31 15:58
  • 2092

Android中assets目录和res/raw目录的异同区别和使用场景

Android中assets目录和res/raw目录的异同和使用场景 1 作者:futurexiong更新于 07月05日访问(3670)评论(12) 好久没写些什么了,一直比...
  • ylxbcs
  • ylxbcs
  • 2014-03-14 11:04
  • 1181

Android中assets目录和res/raw目录的异同和使用场景

好久没写些什么了,一直比较忙,有近2个月没更新博客了。 今天看到有人问Android中assets目录和raw目录的区别和使用情况。 能提出这个问题的,应该都了解它们的共同点: 它们...
  • nipengwkd
  • nipengwkd
  • 2013-07-13 16:35
  • 619

Android中assets目录和res/raw目录的异同和使用场景

出自:http://my.eoe.cn/futurexiong/archive/5350.html 今天看到有人问Android中assets目录和raw目录的区别和使用情况。 能提出...
  • tcgwl
  • tcgwl
  • 2013-11-19 15:57
  • 1541

Android中assets目录和res/raw目录的异同和使用场景

今天看到有人问Android中assets目录和raw目录的区别和使用情况。 能提出这个问题的,应该都了解它们的共同点: 它们会被原封不动的拷贝到APK中,而不会像...
  • qq_31405679
  • qq_31405679
  • 2016-08-22 14:05
  • 102

Android中assets目录和res/raw目录的异同和使用场景

原文链接 好久没写些什么了,一直比较忙,有近2个月没更新博客了。 今天看到有人问Android中assets目录和raw目录的区别和使用情况。 能提出这个问题的,应该都了解它们的...
  • jiangguohu1
  • jiangguohu1
  • 2014-01-13 10:28
  • 355

Android中资源文件assets和res下面raw文件的使用不同点

在建立项目中一般会默认建立assets文件,当然我们还可以在res文件下面建立raw文件夹,这里面都可以存放一些图片,音频或者文本信息,可以供我们在程序当中进行使用,不过他们两个也有不同点;    ...
  • jiangqq781931404
  • jiangqq781931404
  • 2012-01-08 21:04
  • 3217

Android 分割合并文件 assets res/raw 存放资源的限制

写程序的时候想引用外部的apk为自己所用,想在安装自己程序apk的时候一起安装关联的apk,把关联的apk放在 assets目录下面,但是2.3以前的任何压缩资源的原始大小超过1M将不能从APK中...
  • Huaerge
  • Huaerge
  • 2015-12-11 12:02
  • 1647
    个人资料
    • 访问:1514233次
    • 积分:19937
    • 等级:
    • 排名:第491名
    • 原创:545篇
    • 转载:13篇
    • 译文:2篇
    • 评论:323条
    关于我
    邮箱: zhangphil@live.com
    博客专栏