Home Java javaTutorial Java implements method of parsing binary files

Java implements method of parsing binary files

Feb 27, 2017 pm 04:30 PM

1. Requirements description, implementation details:

Parse the binary file files\case10\binary, which contains a string and a picture. The data file format is string data length (2 Bytes) + string content + picture data length (4 bytes) + picture data, the data length is the data byte length, with the high-order bit last, the string is UTF-8 encoded, please parse and output the string content, picture The file is saved as files\case10\test.png.

2. Implementation code:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

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年2月7日 上午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 解析二进制文件

 

* @param sourceFileName

 

*

 

* @author wjggwm

 

* @data 2017年2月7日 上午11:47:12

 

*/

 

public static void readFile(String sourceFileName) {

 

InputStream in = null;

 

try {

 

in = new FileInputStream(sourceFileName);

 

  

 

// 读取字符串数据长度字节

 

byte[] txtLenByte = new byte[2];

 

in.read(txtLenByte);

 

int txtlen = byte2ToUnsignedShort(txtLenByte, 0);

 

  

 

// 读取字符串字节

 

byte[] txtByte = new byte[txtlen];

 

in.read(txtByte);

 

//字符串为UTF-8编码

 

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

 

// 输出字符串

 

System.out.println(txt);

 

  

 

// 读取图片数据长度

 

byte[] imgLenByte = new byte[4];

 

in.read(imgLenByte);

 

int imgLen = byte4ToInt(imgLenByte, 0);

 

  

 

// 读取图片数据

 

byte[] img = new byte[imgLen];

 

in.read(img);

 

// 生成图片文件

 

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 将字节写入文件

 

* @param imgName

 

* @param imgByte

 

*

 

* @author wjggwm

 

* @data 2017年2月7日 上午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数组转换为无符号short整数

 

* @param bytes

 

* @param off

 

* @return

 

*

 

* @author wjggwm

 

* @data 2017年2月7日 上午11:05:58

 

*/

 

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

 

// 注意高位在后面,即大小端问题

 

int low = bytes[off];

 

int high = bytes[off + 1];

 

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

 

}

 

  

 

/**

 

*

 

* @Description byte数组转换为int整数

 

* @param bytes

 

* @param off

 

* @return

 

*

 

* @author wjggwm

 

* @data 2017年2月7日 上午11:07:23

 

*/

 

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

 

// 注意高位在后面,即大小端问题

 

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;

 

}

 

}

Copy after login

The above is the entire content of this article. I hope it will be helpful to everyone’s study. I also hope that everyone will learn more. Support PHP Chinese website.

For more articles related to Java’s method of parsing binary files, please pay attention to the PHP Chinese website!


Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Is the company's security software causing the application to fail to run? How to troubleshoot and solve it? Is the company's security software causing the application to fail to run? How to troubleshoot and solve it? Apr 19, 2025 pm 04:51 PM

Troubleshooting and solutions to the company's security software that causes some applications to not function properly. Many companies will deploy security software in order to ensure internal network security. ...

How to simplify field mapping issues in system docking using MapStruct? How to simplify field mapping issues in system docking using MapStruct? Apr 19, 2025 pm 06:21 PM

Field mapping processing in system docking often encounters a difficult problem when performing system docking: how to effectively map the interface fields of system A...

How to elegantly obtain entity class variable names to build database query conditions? How to elegantly obtain entity class variable names to build database query conditions? Apr 19, 2025 pm 11:42 PM

When using MyBatis-Plus or other ORM frameworks for database operations, it is often necessary to construct query conditions based on the attribute name of the entity class. If you manually every time...

How does IntelliJ IDEA identify the port number of a Spring Boot project without outputting a log? How does IntelliJ IDEA identify the port number of a Spring Boot project without outputting a log? Apr 19, 2025 pm 11:45 PM

Start Spring using IntelliJIDEAUltimate version...

How do I convert names to numbers to implement sorting and maintain consistency in groups? How do I convert names to numbers to implement sorting and maintain consistency in groups? Apr 19, 2025 pm 11:30 PM

Solutions to convert names to numbers to implement sorting In many application scenarios, users may need to sort in groups, especially in one...

How to safely convert Java objects to arrays? How to safely convert Java objects to arrays? Apr 19, 2025 pm 11:33 PM

Conversion of Java Objects and Arrays: In-depth discussion of the risks and correct methods of cast type conversion Many Java beginners will encounter the conversion of an object into an array...

How to use the Redis cache solution to efficiently realize the requirements of product ranking list? How to use the Redis cache solution to efficiently realize the requirements of product ranking list? Apr 19, 2025 pm 11:36 PM

How does the Redis caching solution realize the requirements of product ranking list? During the development process, we often need to deal with the requirements of rankings, such as displaying a...

How to convert names to numbers to implement sorting within groups? How to convert names to numbers to implement sorting within groups? Apr 19, 2025 pm 01:57 PM

How to convert names to numbers to implement sorting within groups? When sorting users in groups, it is often necessary to convert the user's name into numbers so that it can be different...

See all articles