Java二进制文件解析之最终解析

 时间:2026-02-14 16:44:42

1、读取二进制文件,并将二进制文件转为byte[],方便后续的二进制数组截取,详细内容如下,如图所示:

@SuppressWarnings("resource")

public byte[] getContent(String filePath) throws IOException {  

File file = new File(filePath);  

long fileSize = file.length();

if (fileSize > Integer.MAX_VALUE) {  

System.out.println("file too big...");  

return null;  

}  

FileInputStream fi = new FileInputStream(file);  

byte[] buffer = new byte[(int) fileSize];  

int offset = 0;  

int numRead = 0;  

while (offset < buffer.length  

&& (numRead = fi.read(buffer, offset, buffer.length - offset)) >= 0) {  

offset += numRead;  

}  

// 确保所有数据均被读取  

if (offset != buffer.length) {  

throw new IOException("Could not completely read file "    + file.getName());  

}  

fi.close();  

return buffer;  

}  

Java二进制文件解析之最终解析

2、准备截取二进制数组的方法,截取方法如下:

/**

* 截取字节数组

* @param bytes 原始数组

* @param offset 偏移量

* @param size 长度

* @return 新的字节数组

*/

public static byte[] copyBytes(byte[] bytes, int offset, int size){

byte[] newBytes = new byte[size];

System.arraycopy(bytes, offset, newBytes, 0, size);

return newBytes;

}

Java二进制文件解析之最终解析

3、准备将字节数组转为无符号short类型的方法(注:其他转int,转string类型的方法就不在这儿一一写出来了),方法如下:

 /**

     * 将字节数组转为short类型(注:由于转换后为有符号short,但我们需要无符号short,所以与上0x0FFFF,返回int类型)

     * @param b

     * @return

     */

    public static int byte2Short(byte[] b) {

        short shortValue = 0;

        for (int i = 0; i < b.length; i++) {

        shortValue += (b[i] & 0x00FF) << (8 * (1 - i));

        }

        return shortValue & 0x0FFFF;

    }

Java二进制文件解析之最终解析

4、在将上述的基本方法准备结束之后就可以正式解析了,解析的主要原理就是“按照数据协议,截取每一个属性对应的字节数组,然后将该字节数组转换为我们需要的数值”。解析方法如下:

public static MessageHeader getMessageHeader(byte[] bytes){

MessageHeader result = new MessageHeader();

int offset = 0;

int size = 0;

byte[] b;

/**

* 开始解析

*/

size = 2;

b = DataUtil.copyBytes(bytes, offset, size);

int tag = DataUtil.byte2Short(b);

result.setTag(tag);

offset += size;

b = DataUtil.copyBytes(bytes, offset, size);

int length = DataUtil.byte2Short(b);

result.setLength(length);

offset += size;

return result;

}

Java二进制文件解析之最终解析

5、在引用第四步的方法时,需传入第一步中读取的结果byte[],如下所示:

MessageHeader header = getMessageHeader(bytes);

这样我们就可以将这个二进制文件转为一个或多个对象,方便我们对获得的这些数据进行处理了。

  • 有抵押贷款的房子要拆迁怎么办
  • dubuque ia在哪个国家
  • 60级德巴攻略
  • 错误629,629错误代码怎么解决?
  • OU电音如何查看个人头像大图
  • 热门搜索
    旅游推荐 蓟县旅游 旅游报价 越南旅游 厦门旅游攻略 吉林旅游 昆明旅游景点 旅游路线 阳朔旅游 长白山旅游攻略