最近在做從assets讀取大檔案中的片段内容,在以前讀取sd卡檔案使用FileInputStream很快,但是在切換到assets的InputStream就慢得抓狂了。。
究其原因是skip 的問題,廢話不多講,讓assets的檔案能以FileInputStream的方式讀取:
首先将檔案名字尾改成以下的:
/* these formats are already compressed, or don't compress well */
static const char* kNoCompressExt[] = {
".jpg", ".jpeg", ".png", ".gif",
".wav", ".mp2", ".mp3", ".ogg", ".aac",
".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet",
".rtttl", ".imy", ".xmf", ".mp4", ".m4a",
".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2",
".amr", ".awb", ".wma", ".wmv"
};
使用getAssets().openFd(name)方法産生一個AssetFileDescriptor變量openFd,openFd.createInputStream()方法可産生FileInputStream對象,就可以讓skip變快了,代價就是apk包會變大(http://blog.csdn.net/se7en1305687887/article/details/17389849 為什麼要把檔案名字尾改成上表?)。