`

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

    博客分类:
  • j2me
阅读更多

 

转载 http://yarin.iteye.com/blog/546923#
文章分类:移动开发 关键字: bincompiler、bin文件、资源打包、j2me

版权申明:http://yarin.iteye.com/blog/453262  

 

在开发游戏时,总是要使用很多的资源文件,比如:图片、音乐等。而我们经常会遇到一些商业游戏中都看不到这些资源文件,那是因为商业游戏,一般都会将这些资源文件打包成二进制的文件,然后在程序中读取,并使用。这样的游戏看上去更显得专业一些,本文我们就来学习一个最简单的将资源文件打包成二进制文件的方法——使用BinCompiler将资源文件打包成二进制文件。

 

所需工具:BinCompiler(见附件)

 

运行“BinCompiler.exe”,指定要打包的资源文件的路径,和输出二进制文件的路径,如下图所示。


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

Java代码 复制代码
  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   
FName	Index	Pos	Size
A_04.png	0	0	4141
A_03.png	1	4145	3802
A_02.png	2	7951	3813
A_01.png	3	11768	3959

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

代码清单:BinReader.java

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. }  
/*******************************************************************************
 * Reads a file from the BIN file and return data as a byte buffer
 *******************************************************************************/
public byte[] readFile(String binfile, int pos)
{
	byte buffer[];
	int len;

	try {

		InputStream is = Class.getClass().getResourceAsStream("/" + binfile);

		is.skip(pos);

		len  = (is.read() & 0xFF) << 24;
		len  |= (is.read() 0xFF) << 16;
		len  |= (is.read() & 0xFF) << 8;
		len  |= (is.read() & 0xFF);

		buffer = new byte[len];
	
		is.read(buffer, 0, buffer.length);

		is.close();
		is = null;
	
		System.gc();
	} catch (Exception e) {
		buffer = null;
		e.printStackTrace();
		System.gc();
		return null;
	}

	return buffer;
}

/*******************************************************************************
 * Reads a file from the BIN file and return data as an Image
 *******************************************************************************/
public Image readImage(String binfile, long pos)
{
	byte buffer[];
	long len;

	try {
		InputStream is = Class.getClass().getResourceAsStream("/" + binfile);
		
		is.skip(pos);
		
		len  = (is.read() & 0xFF) << 24;
		len  |= (is.read() 0xFF) << 16;
		len  |= (is.read() & 0xFF) << 8;
		len  |= (is.read() & 0xFF);

		buffer = new byte[len];
	
		is.read(buffer, 0, buffer.length);

		is.close();
		is = null;
	
		System.gc();
	} catch (Exception e) {
		buffer = null;
		e.printStackTrace();
		System.gc();
		return null;
	}

	return Image.createImage(buffer, 0, buffer.length);
}

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

例如我们读取一个图片

Java代码 复制代码
  1. Image image = readimage( "images.bin" 0 );  
Image image = readimage("images.bin", 0);

可以看出,我们传入的pos的值是0,对应index.txt中就应该是A_04.png。 

很简单,可以直接使用就是了。谢谢大家支持。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    用于将bin文件转化为二进制数组的工具

    这个工具就是为了满足这种需求而设计的,它可以将bin文件方便地转化为二进制数组,便于在代码中直接使用。 二进制数组在编程中扮演着重要角色,特别是在低级别操作中,如直接与硬件交互或处理内存中的数据。例如,...

    C++文件转二进制,二进制转文件

    在C++编程中,将文件转换为二进制和从二进制还原文件是一项常见的任务,特别是在处理图像、音频、视频和其他数据时。这个过程涉及到读取文件内容并将其存储为二进制数据,以及从二进制数据中恢复原始文件。在VS2010...

    hex文件转二进制工具

    5. 转换完成后,用户可以使用编程器或烧录软件将生成的二进制文件加载到目标硬件。 总的来说,"hex文件转二进制工具"是嵌入式系统开发者必备的一种实用工具,它简化了HEX和二进制文件之间的转换,提高了工作效率,...

    将二进制文件转换为16进制

    在描述中提到的"ReadBinaryFile"可能是一个实现这个功能的程序,它读取二进制文件,将其中的数据转换成十六进制格式,并可能提供将这些数据保存为文本文件的选项。这个程序可能包含了如上所述的C++代码逻辑,通过...

    java 将文件中二进制文件转换成文本文本文件并输出

    在Java编程语言中,将二进制文件转换为文本文档通常涉及到字符编码的理解和处理。二进制文件可以包含任何类型的数据,如图像、音频、视频或纯文本,但以非可读格式存储。而文本文档通常使用特定的字符编码(如ASCII...

    文本文件转换成二进制文件

    5. 写入二进制数据:使用`fwrite`函数将转换后的二进制数据写入到新的二进制文件中。 6. 关闭文件:使用`fclose`函数关闭文本文件和二进制文件。 接下来,将二进制数据存储到C语言的源代码文件(`.c`文件)中的数组...

    将文件上传、下载(以二进制流保存到数据库)实现代码

    在讨论如何将文件上传、下载并以二进制流的方式保存到数据库中时,首先需要了解几个关键概念:文件上传、文件下载、二进制流以及数据库操作。 文件上传通常指的是将本地或者网络上的文件通过网络上传到服务器。在...

    MFC读取资源中的文本及二进制内容 文件打包进exe文件

    把文件资源打包进MFC的exe文件中,运行时进行加载,然后读取文件中的文本内容或者二进制内容 内含应用例程:1.把一个对象存为二进制文件,加载文件后恢复原对象 2.生成文本,加载资源中的文本文件,获取文本中的字符...

    文件转换为二进制流

    文本字符串与byte[], 整个物理文件与byte[], 物理文件内容与byte[], stream与byty[] 之间的相互转换。 从磁盘读取文件,将文件写入磁盘。

    【博客 Java调用MATLAB,将文件转换为二进制流】java+matlab程序

    这篇博客“Java调用MATLAB,将文件转换为二进制流”详细介绍了如何利用Java调用MATLAB的功能来处理文件,将其转换为二进制流。这种技术在数据处理、文件传输或存储等领域非常有用,因为二进制格式可以更高效地处理...

    c#读取二进制文件c#读取二进制文件

    根据给定的信息,本文将详细解释C#中如何读取和写入二进制文件,以及涉及的相关知识点。 ### C#读取与写入二进制文件 在C#编程中,经常需要处理二进制文件,比如图像、音频文件等非文本数据。为了高效地读写这些...

    exe文件转成16进制工具

    标题中的“exe文件转成16进制工具”是指一种软件或程序,它能够将可执行文件(.exe)的内容转换成16进制表示形式。这种转换在计算机编程领域非常常见,特别是在处理二进制数据、逆向工程、软件调试或者进行低级编程...

    二进制文件(bin)转成十六进制文件(hex)

    二进制文件通常包含了机器可执行的代码或者特定设备可以直接加载的数据,而十六进制文件则是一种更加人类可读的格式,它将二进制数据转换为十六进制表示,方便查看和调试。本文将详细讲解如何将多个bin文件合并,并...

    读取文件内容并以二进制显示

    描述中的 "以二进制显示" 指的是将文件的内容以01二进制码的形式展示出来,这对于开发者来说是非常有用的,因为它能揭示文件的原始结构,尤其是在处理二进制文件(如位图、可执行程序或系统文件)时。 标签 "控件" ...

    将二进制文件打包成 PNG图像的工具_JavaScript_代码_下载

    将二进制文件打包成 PNG 图像的工具。 用户可以加载bundle.wp文件并提取由原始文件路径索引的数据。 文件夹中的文件root/img/logo.png可以通过以下方式访问bundle.read("img/logo.png") == Uint8Array 辅助方法允许...

    bin文件转换成十六进制数组

    "bin文件转换成十六进制数组"这个主题是关于将二进制数据转化为更适合编程和烧录的十六进制表示。这种转换对于嵌入式系统开发、固件更新、微控制器编程等工作尤为重要。 首先,我们要理解bin文件的性质。BIN是二...

    任意文件转C语言数组 二进制BIN文件、图片转数组

    标题“任意文件转C语言数组 二进制BIN文件、图片转数组”所指的就是这个过程,即将非文本格式的数据(如二进制文件、图片)转换为C语言的字符数组形式,以便于在C代码中直接使用。这样的操作对于单片机编程尤其有用...

    VS文件与二进制相互转换

    将文件转换为二进制的过程通常涉及到读取文件内容并将其转换为字节序列。例如,在C#中,可以使用FileStream类读取文件,然后使用BitConverter类将字节序列转换为其他数据类型。相反,将二进制数据转换回文件意味着将...

    二进制文件查看器

    "二进制文件查看器"是一款专为查看和分析二进制数据而设计的应用程序,它允许用户以二进制和十六进制模式检查文件内容。这种工具在处理非文本格式的数据,如图像、音频、视频文件或者系统底层的数据时非常有用。下面...

Global site tag (gtag.js) - Google Analytics