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
相关文章:
网站制作公司,橙子建站是合法的吗?
如何设置并定期更换建站之星安全管理员密码?
建站之星2.7模板快速切换与批量管理功能操作指南
详解jQuery停止动画——stop()方法的使用
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何在阿里云虚拟服务器快速搭建网站?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
如何在腾讯云免费申请建站?
如何通过wdcp面板快速创建网站?
如何快速搭建二级域名独立网站?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何构建满足综合性能需求的优质建站方案?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
临沂网站制作企业,临沂第三中学官方网站?
网站制作模板下载什么软件,ppt模板免费下载网站?
如何获取开源自助建站系统免费下载链接?
建站VPS能否同时实现高效与安全翻墙?
Android自定义控件实现温度旋转按钮效果
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
如何快速搭建安全的FTP站点?
建站主机是否属于云主机类型?
如何配置FTP站点权限与安全设置?
活动邀请函制作网站有哪些,活动邀请函文案?
如何选择香港主机高效搭建外贸独立站?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
网站制作网站,深圳做网站哪家比较好?
中山网站推广排名,中山信息港登录入口?
如何通过建站之星自助学习解决操作问题?
如何挑选高效建站主机与优质域名?
官网网站制作腾讯审核要多久,联想路由器newifi官网
如何快速搭建高效服务器建站系统?
济南专业网站制作公司,济南信息工程学校怎么样?
如何有效防御Web建站篡改攻击?
已有域名能否直接搭建网站?
建站之星云端配置指南:模板选择与SEO优化一键生成
网站制作员失业,怎样查看自己网站的注册者?
MySQL查询结果复制到新表的方法(更新、插入)
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
制作销售网站教学视频,销售网站有哪些?
建站之星伪静态规则如何正确配置?
建站主机与虚拟主机有何区别?如何选择最优方案?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
如何在宝塔面板中创建新站点?
建站主机无法访问?如何排查域名与服务器问题
如何通过多用户协作模板快速搭建高效企业网站?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何在Windows环境下新建FTP站点并设置权限?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
建站之星导航配置指南:自助建站与SEO优化全解析
*请认真填写需求信息,我们会在24小时内与您取得联系。