1.用Android接口来读取streamingAsset目录 可以提高效率,www方式效率不好 还耗内存。读取byte后直接CreateFromMemory 来创建bundle。其他模式还是CreateFromFile来创建效率更好,memory的方式耗内存,所以大文件还是要拷出来放在file目录 用 CreateFromFile来创建,IOS上全部用CreateFromFile。
public byte[] getFromAssetss(String fileName){ //android里边读取streamingAsset目录的文件
try {//得到资源中的Raw数据流
InputStream in = getResources().getAssets().open(fileName);
//得到数据的大小
int length = in.available();
byte [] buffer = new byte[length];
//读取数据
in.read(buffer);
//依test.txt的编码类型选择合适的编码,如果不调整会乱码
// res = EncodingUtils.getString(buffer, "BIG5");
//关闭
in.close();
return buffer;
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
关于文件读取速度 1 最快的是File目录下的File.readallbytes 其次用上边的接口读取StreamingAssets 目录 最后是WWW方式异步读取StreamingAssets 目录。
-----------------------------------------------------------------------------
上边是读取整个byte文件
2.下边方法是读StreamingAssets 文件流方式,读取的是byte的部分数据,注意的是native和java的交互的引用计数不得超过512 也就是一瞬间同时请求return的数据不能太多 不然内存的自动释放 反应不过来。解决的方法是把该段数据请求堆栈设为局部引用。在Unity里边如下使用:
for (int i=0; i<5000; i++) {
AndroidJNI.PushLocalFrame (0);
byte[] data = CenterGhome.getStreamFromAssetss ("test.x", 0, a1.Length);
AndroidJNI.PopLocalFrame (System.IntPtr.Zero);
}
------------------
// HashMap<String, InputStream> filemap = new HashMap<String, InputStream>();
// byte [] buffer = new byte[5*1024*1024];;
public byte [] getStreamFromAssetss(String fileName, int offset,int length){ //Android里边