java实现解析二进制文件的方法(字符串、图片)

发布时间 - 2026-01-10 22:58:36    点击率:

1、需求说明,实现细节要求:

解析二进制文件 files\case10\binary,其中包含一个字符串和一张图片,数据文件格式为字符串数据长度(2字节)+字符串内容+图片数据长度(4字节)+图片数据,数据长度均为数据字节长度,高位在后,字符串为UTF-8编码,请解析,输出字符串内容,图片文件保存为files\case10\test.png。

2、实现代码:

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;

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# java解析二进制文件  # java  # 二进制解析  # java解析二进制字符串  # Java实现图片与二进制的互相转换  # java读取图片并转化为二进制字符串的实现方法  # Java图片与二进制相互转换实现示例讲解  # 上午  # 在后面  # 转换为  # 均为  # 大家多多  # 保存为  # 格式为  # 其中包含  # Description  # data  # public  # author  # wjggwm  # TODO  # static  # readFile  # args  # main  # getPath  # toURI 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Angular 表单中正确绑定输入值以确保提交与验证正常工作  香港服务器网站卡顿?如何解决网络延迟与负载问题?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  Laravel怎么使用artisan命令缓存配置和视图  中山网站制作网页,中山新生登记系统登记流程?  Laravel怎么为数据库表字段添加索引以优化查询  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  打造顶配客厅影院,这份100寸电视推荐名单请查收  *服务器网站为何频现安全漏洞?  太平洋网站制作公司,网络用语太平洋是什么意思?  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  WEB开发之注册页面验证码倒计时代码的实现  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  网站制作企业,网站的banner和导航栏是指什么?  EditPlus中的正则表达式 实战(1)  如何在Windows服务器上快速搭建网站?  Laravel如何使用模型观察者?(Observer代码示例)  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  做企业网站制作流程,企业网站制作基本流程有哪些?  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  b2c电商网站制作流程,b2c水平综合的电商平台?  jQuery validate插件功能与用法详解  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  如何快速搭建高效香港服务器网站?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  利用python获取某年中每个月的第一天和最后一天  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  香港服务器如何优化才能显著提升网站加载速度?  js实现获取鼠标当前的位置  实例解析angularjs的filter过滤器  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  如何在搬瓦工VPS快速搭建网站?  Laravel如何实现事件和监听器?(Event & Listener实战)  如何在腾讯云免费申请建站?  Laravel如何使用Blade模板引擎?(完整语法和示例)  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  免费视频制作网站,更新又快又好的免费电影网站?  如何在阿里云通过域名搭建网站?  如何快速搭建虚拟主机网站?新手必看指南  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理