关于Android/IOS里边读取StreamingAsset目录 文件流

本文介绍了在Android和iOS中高效读取StreamingAsset目录文件的方法。对于Android,推荐使用getFromAssetss方法直接读取byte数据,避免使用WWW方式。对于iOS,直接使用File.Read读取File目录,而StreamingAssets目录则用File.OpenRead。还讨论了在Java和C#之间通过JNI进行文件流交互的注意事项。
摘要由CSDN通过智能技术生成

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里边

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值