时间:2021-05-19
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;}}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
由于二进制数在C#中无法直接表示,所以所有二进制数都用一个字符串来表示例如:二进制:1010表示为字符串:"1010"intd=10;//十进制转二进制字符串C
C#进制转换(二进制、十六进制、十进制互转) 由于二进制数在C#中无法直接表示,所以所有二进制数都用一个字符串来表示 例如:二进制:1010表示为字符串
本文实例讲述了C#实现将32位MD5摘要串转换为128位二进制字符串的方法。分享给大家供大家参考,具体如下:将32为MD5摘要串转换为128位二进制字符串://
java转换字符串编码格式(解码错误,重新解码)字符集概念:规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系。我们
JS字符串与二进制的相互转化的方法,具体代码如下所示://字符串转ascii码,用charCodeAt();//ascii码转字符串,用fromCharCode