使用BinCompiler将资源文件打包成二进制文件

简介:

在开发游戏时,总是要使用很多的资源文件,比如:图片、音乐等。而我们经常会遇到一些商业游戏中都看不到这些资源文件,那是因为商业游戏,一般都会将这些资源文件打包成二进制的文件,然后在程序中读取,并使用。这样的游戏看上去更显得专业一些,本文我们就来学习一个最简单的将资源文件打包成二进制文件的方法——使用BinCompiler将资源文件打包成二进制文件。
所需工具:BinCompiler(见附件)
运行“BinCompiler.exe”,指定要打包的资源文件的路径,和输出二进制文件的路径,如下图所示。


点击create按钮,即在我们制定的位置产生一个bin文件,当然在这个bin文件所在目录还会产生一个index.txt文件。我们在程序中读取这些资源时,需要使用这个index.txt。index.txt文件如下所示:


 
 
  1. FName   Index   Pos Size     
  2. A_04.png    0   0   4141    
  3. A_03.png    1   4145    3802    
  4. A_02.png    2   7951    3813    
  5. A_01.png    3   11768   3959   

接下来我们可以使用BinReader.java文件中的两个方法来读取这些资源文件了。
代码清单:BinReader.java


 
 
  1. /*******************************************************************************    
  2.  * Reads a file from the BIN file and return data as a byte buffer    
  3.  *******************************************************************************/    
  4. public byte[] readFile(String binfile, int pos)     
  5. {     
  6.     byte buffer[];     
  7.     int len;     
  8.     
  9.     try {     
  10.     
  11.         InputStream is = Class.getClass().getResourceAsStream("/" + binfile);     
  12.     
  13.         is.skip(pos);     
  14.     
  15.         len  = (is.read() & 0xFF) << 24;     
  16.         len  |= (is.read() 0xFF) << 16;     
  17.         len  |= (is.read() & 0xFF) << 8;     
  18.         len  |= (is.read() & 0xFF);     
  19.     
  20.         buffer = new byte[len];     
  21.          
  22.         is.read(buffer, 0, buffer.length);     
  23.     
  24.         is.close();     
  25.         is = null;     
  26.          
  27.         System.gc();     
  28.     } catch (Exception e) {     
  29.         buffer = null;     
  30.         e.printStackTrace();     
  31.         System.gc();     
  32.         return null;     
  33.     }     
  34.     
  35.     return buffer;     
  36. }     
  37.     
  38. /*******************************************************************************    
  39.  * Reads a file from the BIN file and return data as an Image    
  40.  *******************************************************************************/    
  41. public Image readImage(String binfile, long pos)     
  42. {     
  43.     byte buffer[];     
  44.     long len;     
  45.     
  46.     try {     
  47.         InputStream is = Class.getClass().getResourceAsStream("/" + binfile);     
  48.              
  49.         is.skip(pos);     
  50.              
  51.         len  = (is.read() & 0xFF) << 24;     
  52.         len  |= (is.read() 0xFF) << 16;     
  53.         len  |= (is.read() & 0xFF) << 8;     
  54.         len  |= (is.read() & 0xFF);     
  55.     
  56.         buffer = new byte[len];     
  57.          
  58.         is.read(buffer, 0, buffer.length);     
  59.     
  60.         is.close();     
  61.         is = null;     
  62.          
  63.         System.gc();     
  64.     } catch (Exception e) {     
  65.         buffer = null;     
  66.         e.printStackTrace();     
  67.         System.gc();     
  68.         return null;     
  69.     }     
  70.     
  71.     return Image.createImage(buffer, 0, buffer.length);     
  72. }   

可以看出,这两个方法都只需要传入bin文件名和图片对应的pos,pos值就在我们上面所说的index.txt文件中去找对应的就可以了。 
例如我们读取一个图片


 
 
  1. Image image = readimage("images.bin"0);  

可以看出,我们传入的pos的值是0,对应index.txt中就应该是A_04.png。 
很简单,可以直接使用就是了。谢谢大家支持。



本文转自 yarin 51CTO博客,原文链接:http://blog.51cto.com/yarin/381934,如需转载请自行联系原作者

相关文章
|
移动开发 JSON Java
APK文件结构
APK文件结构
145 0
Java实现多文件打包成压缩包下载
Java实现多文件打包成压缩包下载
295 0
|
Python
Nuitka打包二、命令总结
Nuitka打包exe工具,基本命令
2020 0
PyInstall的安装,使用,以及最后打包成一个exe文件
PyInstall的安装,使用,以及最后打包成一个exe文件
|
Linux 编译器 C语言
Buildozer打包
Linux环境下将Python代码打包为app
484 0
|
人工智能 Java 编译器
M文件打包成jar包详解
M文件打包成jar包详解
186 0
|
Java
APK解包修改后,重新打包
APK解包修改后,重新打包
705 0
|
JSON JavaScript 前端开发
Rollup.js打包代码
Rollup.js打包代码
125 0