java implements the method of parsing binary files of string image

  • 2020-06-03 06:38:52
  • OfStack

1. Requirements description, implementation details:

Parsing 2 files \ case10 \ binary hexadecimal file, which contains a string and 1 image, the data file format for the length of the string data (2 bytes) + + image data string content length (4 bytes) + image data, the data length are data bytes, in the high string for UTF - 8 encoding, please parsing, output string content, image file is saved as a files \ case10 \ test png.

2. Implementation code:


package com.igen.case10;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.URISyntaxException;

 

/**

* 

* @ClassName Case10

* @Description TODO

*

* @author wjggwm

* @data 2017 years 2 month 7 day   In the morning 11:46:25

*/

public class Case10 {

 

static final String fileName = "/test.png";

static final String filePath = "D:/files/case10";

static final String sourceFileName = "binary";

 

public static void main(String[] args) {

try {

readFile(Case10.class.getResource(sourceFileName).toURI().getPath());

} catch (URISyntaxException e) {

e.printStackTrace();

}

}

 

/**

* 

* @Description  parsing 2 A binary file 

* @param sourceFileName

*

* @author wjggwm

* @data 2017 years 2 month 7 day   In the morning 11:47:12

*/

public static void readFile(String sourceFileName) {

InputStream in = null;

try {

in = new FileInputStream(sourceFileName);

 

//  Reads the length bytes of string data 

byte[] txtLenByte = new byte[2];

in.read(txtLenByte);

int txtlen = byte2ToUnsignedShort(txtLenByte, 0);

 

//  Read string byte 

byte[] txtByte = new byte[txtlen];

in.read(txtByte);

// The string for UTF-8 coding 

String txt = new String(txtByte, "UTF-8");

//  Output string 

System.out.println(txt);

 

//  Read the length of image data 

byte[] imgLenByte = new byte[4];

in.read(imgLenByte);

int imgLen = byte4ToInt(imgLenByte, 0);

 

//  Read image data 

byte[] img = new byte[imgLen];

in.read(img);

//  Generate image files 

saveToImgByBytes(filePath, fileName, img);

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

if (in != null) {

try {

in.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

 

}

 

/**

* 

* @Description  Writes the bytes to the file 

* @param imgName

* @param imgByte

*

* @author wjggwm

* @data 2017 years 2 month 7 day   In the morning 11:07:45

*/

public static void saveToImgByBytes(String filePath, String imgName, byte[] imgByte) {

try {

File dic = new File(filePath);

if (!dic.exists()) {

dic.mkdirs();

}

File image = new File(filePath + imgName);

if (!image.exists()) {

image.createNewFile();

}

FileOutputStream fos = new FileOutputStream(image);

fos.write(imgByte);

fos.flush();

fos.close();

} catch (Exception e) {

e.printStackTrace();

}

}

 

/**

* 

* @Description byte Array converted to unsigned short The integer 

* @param bytes

* @param off

* @return

*

* @author wjggwm

* @data 2017 years 2 month 7 day   In the morning 11:05:58

*/

public static int byte2ToUnsignedShort(byte[] bytes, int off) {

//  Note that the higher order is at the back, the big and small end 

int low = bytes[off];

int high = bytes[off + 1];

return (high << 8 & 0xFF00) | (low & 0xFF);

}

 

/**

* 

* @Description byte Array to int The integer 

* @param bytes

* @param off

* @return

*

* @author wjggwm

* @data 2017 years 2 month 7 day   In the morning 11:07:23

*/

public static int byte4ToInt(byte[] bytes, int off) {

//  Note that the higher order is at the back, the big and small end 

int b3 = bytes[off] & 0xFF;

int b2 = bytes[off + 1] & 0xFF;

int b1 = bytes[off + 2] & 0xFF;

int b0 = bytes[off + 3] & 0xFF;

return (b0 << 24) | (b1 << 16) | (b2 << 8) | b3;

}

}

Related articles: