现在的位置: 首页 > 综合 > 正文

java分割二进制文件

2018年05月16日 ⁄ 综合 ⁄ 共 1197字 ⁄ 字号 评论关闭

 

/*
 *
 * 读取已知格式的打包文件,通过文件头标志来拆分文件
 *
 */

import java.io.*;
public class write

{
	protected static byte[] strbyte = null;
	public static StringBuffer sb = new StringBuffer();
	public static void main(String[] args)
	throws Exception

	{
		FileInputStream in = new FileInputStream("e:/split/data_2.pak");
		DataInputStream din = new DataInputStream(in);
		// 文件数据
		int length = din.available();
		byte[] data = new byte[length];
		// 读取文件到字节数组
		din.read(data);
		int startPos = 0;
		int endPos = 0;

		for (int j = 0; j < data.length; j++)
		{
			String tmp = Integer.toHexString(0xFF & data[j]).toUpperCase();
			if (tmp.length() < 2)
			{
				for (int i = tmp.length(); i < 2; i++)
					tmp = "0" + tmp;
			}
			sb.append(tmp);
			//为操作方便转换成16进制后判断一下是否是PNG文件头标志
			if (sb.toString().endsWith("89504E470D0A1A0A0000000D49484452")) {
				sb.delete(0,sb.length()); 
				if (j - 15 > 0) {
					endPos = j - 15;
					// 生成图片文件
					fileCreate(startPos,endPos,data);
					startPos = j - 15;
				}
			}
		}
		din.close();
	}

	public static void fileCreate(int startPos, int endPos, byte[] data)
			throws IOException {
		String pngFilePathName = "e:/split/img2/img_"+endPos+".png";
		FileOutputStream out = new FileOutputStream(pngFilePathName);

		BufferedOutputStream buffout = new BufferedOutputStream(out);
		DataOutputStream dataout = new DataOutputStream(buffout);
		for (int j = startPos; j < endPos; j++) {
			dataout.write(data[j]);
		}
		dataout.close();
		
		System.out.println(pngFilePathName);
		

	}

}

 

抱歉!评论已关闭.