Android 按照二进制格式读取.bin文件

项目里需要按照二进制读取一个30M左右的.bin文件,并且赋值到char[]里面。

之前写过一篇文章  读取assets目录下的文件(.bin文件.txt文件) 当实际使用的时候会发现很多问题,例如:

1,读取的速度太慢(因为之前是按行读的,30M的文件按行读。。。我等了十分钟还没好,估计要很久很久)

2,读取的方式不正确,导致最终读出来的文件大小不正确。(因为之前那个连接里面的.bin文件是.txt文件的,所以实际上是按照txt文件读取的,所以不正确)


所以新写一篇,两篇差别还是挺大的、、、不过这一篇也是全部步骤都有,所以不用担心必须要看完前一篇才能看懂这一篇(其实我写的都挺傻瓜式的。。。一步一步照着做就  阔以了  现在文章里面关于原理解释方面的还是很少,主要偏向于实际应用。。。因为原理懂得不是很多,哈哈哈)


第一步:导入大文件  ExtFlashDat.bin

左边切换到Project 目录下面  在main目录下  新建   assets 文件,如图:


第二步: 新建一个工具类来调用   就命名为LcndUtil 吧

然后就是最重要的一步啦,,,很重要,就是把下面的带代码粘贴进那个工具类里面哈哈哈,

下面有讲解里面里面某些跟之前文章的区别:

LcndUtil 完整代码:

public class LcndUtil {

    public static int qwe(Context c , char[] a ) {
        AssetManager manager = c.getResources().getAssets();
        try {
            InputStream inputStream = manager.open("ExtFlashDat.bin");
            InputStreamReader isr = new InputStreamReader(inputStream , "ISO-8859-1" );
            BufferedReader br = new BufferedReader(isr);
            int length;
            length = br.read(a,0,32*1024*1024);
            //关流
            br.close();
            isr.close();
            inputStream.close();
            return length;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return 0;
    }

}

方法的返回值是  长度(字节)。

可以看到AssetManager  有一个 open方法   里面输入的是 assets目录下的要读取那个文件的 名字(精确到后缀名),结果返回的是一个InputStream 对象

InputStreamReader 初始化传参 第一个很好理解 就是上面的InputStream 对象  第二个是一个String 类型,它代表的就是你要按照什么  编码格式 去读取这个文件 , 按照不同的编码格式去读取相同文件,读取出来的内容和大小都不一样(废话。。。),

那这个 “编码格式” 到底是啥呢?  听起来很熟悉 之前写过一篇关于乱码的文章 也讲到过,实际上就是AS 下面 那个我么你一般看起来是 “UTF-8”  的那个, 把那个点开, 下面有一个more 点开,会看到很多很多的 编码格式,其中我们要用的就是“ISO-8859-1”  这一种  这种就是按照二进制读取的。  下面是MainActivity里面调用的代码:

public char[] aaa;
 aaa = new char[32 * 1024 * 1024];
        LcndUtil.qwe(MainActivityAAA.this, aaa);
然后我用系统时间测试了一下执行时间,结果:0.5s  妈呀,很快很爽,  最后我是存到了一个char[]  里面。


--------------------------------------------------------------------------------------------------------------------------

下面可能有人会问:  你只是把char[]  传参进去了  可是返回值是int   那你没有改变char[]  的内容啊,应该最后返回值是char[]然后赋值给一个  char[]啊  ?     哈哈哈哈,  你可以在调用这个方法后试一试有没有改变这个值,  然后看一下我置顶的一篇文章 :  Java 值传递和引用传递   OK   然后就没了   

发布了124 篇原创文章 · 获赞 141 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/weixin_36838630/article/details/79496755