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(); } }