[Android]使用checksum校验文件是否被修改

来源:互联网 发布:数组中求最大 最小值 编辑:程序博客网 时间:2024/05/29 00:34

FileUtils类中封装了用于获取文件32位校验码的方法:

//frameworks/base/core/java/android/os/FileUtils.javapublic static long checksumCrc32(File file) throws FileNotFoundException, IOException {        CRC32 checkSummer = new CRC32();        CheckedInputStream cis = null;        try {            cis = new CheckedInputStream( new FileInputStream(file), checkSummer);            byte[] buf = new byte[128];            while(cis.read(buf) >= 0) {                // Just read for checksum to get calculated.            }            return checkSummer.getValue();        } finally {            if (cis != null) {                try {                    cis.close();                } catch (IOException e) {                }            }        }    }

在TelephonyProvider中就有应用到次方法来校验apns-conf.xml是否被修改,判断apn数据表是否需要更新:

private boolean apnDbUpdateNeeded() {            File confFile = getApnConfFile();            long newChecksum = getChecksum(confFile);//计算当次的checksum            long oldChecksum = getApnConfChecksum();//从历史记录中获取上一次的checksum            if (newChecksum == oldChecksum) {//对比2次                return false;//文件没有被修改            } else {                return true;//文件已被修改            }        }