java 提取微信、手机QQ 等 diskcache 目录文件中的JPG图片数据

java提取微信、手机QQ等diskcache目录文件中的缩略图代码。

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;

/**
 *
 * @author chenping
 */
public class test {

    public static void main(String[] args) throws Exception {
        String file = "D:\\documentation\\bak\\xiaolajiao\\tencent\\MicroMsg\\f8745e0b163c24aed78341bab9ffa4f4\\sfs\\sns.block.00000";
        byte tag[] = {(byte) 0xFF, (byte) 0xD8, (byte) 0xFF, (byte) 0xE0, (byte) 0x00, (byte) 0x10, (byte) 0x4A, (byte) 0x46, (byte) 0x49, (byte) 0x46};

        File cache = new File(file);
        FileInputStream fis = new FileInputStream(cache);
        byte buf[] = new byte[tag.length];

        byte ct[] = covertToByteArray(fis);

        int start = 0, end = 0;

        for (int i = 0; i < ct.length; i++) {
            boolean t = false;
            try {
                System.arraycopy(ct, i, buf, 0, tag.length);

            } catch (Exception ex) {
                t = true;
            }

            if (t || Arrays.equals(buf, tag)) {
                if (t) {
                    end = ct.length - 1;
                } else {
                    end = i;
                }

                // save to file
                int len = end - start;
                if (len != 0) {
                    System.out.println("len=" + len);
                    byte data[] = new byte[len];
                    System.arraycopy(ct, start, data, 0, len);
                    System.out.println("start: "  + start+ " , end: " + end + " , len=" + len);
                    saveToFile(data, i);
                    start = end;
                }
                
            }

            if (t) {
                break;
            }
        }

    }

    private static byte[] covertToByteArray(InputStream stream) throws IOException {
        ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
        byte[] buff = new byte[1024];
        int rc = -1;
        while ((rc = stream.read(buff, 0, 1024)) != -1) {
            swapStream.write(buff, 0, rc);
        }
        byte[] in2b = swapStream.toByteArray();
        return in2b;
    }

    private static void saveToFile(byte[] ct, int idx) throws IOException {
        File f = new File("d:/cac_sns_5/img_" + idx + ".jpg");
        if (!f.exists()) {
            f.createNewFile();
        }
        FileOutputStream fos = new FileOutputStream(f);
        fos.write(ct);
        fos.close();
    }

}

相关推荐