res/raw文件的存放和读取

在Android开发中,为了保留文件的原始格式不被编译,开发者常将音频、视频等资源放入res/raw目录。这些文件会原封不动地打包进apk。要读取raw文件,可以通过特定的方法进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通常,如果Android开发者有些文件比如音频,视频,.html,.mp3等等这些文件不希望编译器编译而保持原始原貌打包进apk文件(这在游戏开发中很常见和普遍,如游戏用到的游戏音乐、图等资源),那么可以使用Android在res目录下的res/raw保存。res/raws目录下的文件将不被Android编译成二进制,Android将这些文件资源保持原状原封不动的打包进最终编译发布时候的apk文件。

怎样读取raw文件:

package com.zzw.testraw;

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 {

    private static final String TAG = "MainActivity";

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

        readRaw();
    }

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

        try {
            byte[] data = readByteDataFromInputStream(is);
            String content = new String(data, 0, data.length, "UTF-8");
            Log.d(TAG, content);
        } catch (IOException 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;

        int c = 0;
        byte[] buffer = new byte[BUFFER_SIZE];

        // 写成baos.write(buffer, 0, c)的原因是读多少写多少
        while ((c = bis.read(buffer)) != -1) {
            baos.write(buffer, 0, c);
            baos.flush();
        }

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

        baos.close();
        is.close();

        return data;

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值