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; } }
#以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援PHP中文網。
更多java實作解析二進位檔案的方法相關文章請關注PHP中文網!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具