最近做android的一个小工具,其中一个功能要计算一个apk的sha1值。但是遇到大的文件就会报错。遇到任何问题,首先要发现问题,然后分析问题,最后解决问题。
发现问题
我调试了一下程序,发现问题出现在下面的代码里如下:
File file=new File(path);
long length=file.length();
DataInputStream in;
in = new DataInputStream(new FileInputStream(path));
byte[] buf = new byte[(int) length];
当我要计算一个大小为50M的apk包时,我的程序直接就报错了,内存溢出。
byte[] buf = new byte[(int) length];
这行代码,导致内存溢出,一次直接申请50M的内存,导致程序崩溃。
2. 分析问题
当我们发现了问题,通过分析问题,找到了原因。不能一次根据文件大小而申请内存空间,因为判断一下,如果是大文件,我们应该分割成小文件进行对应操作。
3. 解决问题
通过分析问题,我们找到解决问题的大概思路。将大文件分割成小文件进行处理。这个比较容易。代码如下:
File file=new File(path);
FileInputStream in = new FileInputStream(file);
MessageDigest messagedigest;
try {
<