日志2.05

本文详细介绍了在Android环境下利用MD5算法进行文件校验码生成的方法,并结合线程池ThreadPool实现了图片缩略图的并发处理,有效提升了应用性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Android的MD5生成

package com.msl.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.MessageDigest;


/**
 * MD5码生成
 * Created by msl on 2015/2/05.
 */
public class MD5Utils {
    private static MD5Utils instance;


    private final char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };


    private MD5Utils() {}


    public static MD5Utils getInstance() {
        if(instance == null) {
            instance = new MD5Utils();
        }
        return instance;
    }


    public String getFileMD5(String file) {
        return getFileMD5(new File(file));
    }


    public String getFileMD5(File file) {
        if(file == null) {
            return null;
        }
        try {
            InputStream is = new FileInputStream(file);
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            byte[] buf = new byte[2048];
            int length;
            while((length = is.read(buf)) != -1) {
                messageDigest.update(buf, 0, length);
            }
            return byteToHexString(messageDigest.digest());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 把byte[]数组转换成十六进制字符串表示形式
     * @param tmp    要转换的byte[]
     * @return 十六进制字符串表示形式
     */
    private String byteToHexString(byte[] tmp) {
        String s;
        // 用字节表示就是 16 个字节
        char str[] = new char[16 * 2]; // 每个字节用 16 进制表示的话,使用两个字符,
        // 所以表示成 16 进制需要 32 个字符
        int k = 0; // 表示转换结果中对应的字符位置
        for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节
            // 转换成 16 进制字符的转换
            byte byte0 = tmp[i]; // 取第 i 个字节
            str[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换,
            // >>> 为逻辑右移,将符号位一起右移
            str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换
        }
        s = new String(str); // 换后的结果转换为字符串
        return s;
    }
}


代码来源自百度,未验证有效性


2.Android的线程管理 线程池ThreadPool的使用

package com.msl.utils;


import android.graphics.Bitmap;


import com.chuxin.family.Constants;
import com.chuxin.family.bean.ThumbBean;


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


/**
 * 缩略图连接池
 * Created by msl on 2015/2/05.
 */
public class ThumbThreadPool {
    private static ExecutorService threadpool;
    private static ThumbThreadPool instance;
    private static ConcurrentHashMap<Thread, ThumbBean> connMap;
    private CallBack callBack;


    private ThumbThreadPool() {
        threadpool = Executors.newCachedThreadPool();
        connMap = new ConcurrentHashMap<>();
    }


    public ThumbThreadPool getInstance(CallBack callBack) {
        if (instance == null) {
            instance = new ThumbThreadPool();
            this.callBack = callBack;
        }
        return instance;
    }

    public synchronized void finish(ThumbBean thumbBean) {
        if (connMap.containsValue(thumbBean)) {
            connMap.remove(thumbBean);
        }
    }


    public void handleReques(ThumbBean thumbBean) {
        Thread thread = new HandleThread(thumbBean);
        connMap.put(thread, thumbBean);
        threadpool.equals(thread);
    }


    private class HandleThread extends Thread {
        private ThumbBean thumbBean;


        private HandleThread(ThumbBean thumbBean) {
            this.thumbBean = thumbBean;
        }


        @Override
        public void run() {
            String url = thumbBean.getUrl();
            //创建出对应的url的图片的缩略图
            Bitmap bitmap = ViewUtils.getInstance().getSmallBitmap(url, 100, 100);//todo  这个大小需要变
            //此时的路径还是在原来的DCIM下面 需要变过去
            int index;
            String folderName;
            index = url.indexOf("DCIM");
            if (index == -1){
                index = url.indexOf("Pictures");
            }
            folderName = url.substring(0, index -1);
            url.replace(folderName, Constants.DISK_THUMB_PATH + File.separator);
            thumbBean.setUrl(url);
            //url已经处理好了,那么将bitmap在本地创建出来
            try {
                FileOutputStream fos = new FileOutputStream(url);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            callBack.onFinish(thumbBean);
        }
    }


    public interface CallBack {
        void onFinish(ThumbBean thumbBean);
    }
}

该类是为了实现即时加载本地图片,使用了线程池,每个需要显示的图片对应一个url,将url对应的图片保存在cache路径下,使用时直接使用即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值