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版本升级流程与兼容性处理

