代码如何判断一个二进制文件(压缩jar包)

    最近做一个项目需要把文件打包压缩成java的jar包,由于jar是采用zip兼容的算法进行压缩的,在jar包可以不带文件清单的情况下可以采用zip的方式进行压缩,这样就可以采用大家熟悉的SharpZipLib开源项目处理了(另人不解的是开源项目自带的zip压缩sample却有问题,编译后运行文件越压越大,而且解压就会有问题)。

   由于打包文件是提供给unix下使用的,至于目录间隔符可以采用项目以提供的相应方法直接替换(unix和windows的文件分隔符方向不一样,但windows兼容unix)由于文本文件行结束标识有差别,如果不去掉windows下多的那个回车符(回车还是换行不记的了)的话在unix下默认使用vi读取会在每行的结尾处存在^M样的乱字符,所以在打包之前必须对需要打包的文件进行判断,如果是非二进制文件的话,需要把每行的结束符进行替换,去掉多余的那个回车符。

   由于SharpZipLib项目中zip部分没有对二进制文件进行判断的方法,那么我们可以接见SharpZipLib中tar部分的相关方法进行(很奇怪为什么同一项目居然zip没有):

     
  // TODO: TarArchive - Is there a better way to test for a text file?
  // It no longer reads entire files into memory but is still a weak test!
  // This assumes that byte values 0-7, 14-31 or 255 are binary
  // and that all non text files contain one of these values
  static bool IsBinary(string filename)
  {
   using (FileStream fs = File.OpenRead(filename))
   {
    int sampleSize = System.Math.Min(4096, (int)fs.Length);
    byte[] content = new byte[sampleSize];
   
    int bytesRead = fs.Read(content, 0, sampleSize);
   
    for (int i = 0; i < bytesRead; ++i) {
     byte b = content[i];
     if ( (b < 8) || ((b > 13) && (b < 32)) || (b == 255) ) {
      return true;
     }
    }
   }
   return false;
  } 

 

呵呵,可能眼力好的朋友已经看见了,该判断还是存在问题,不过对于一般的情况肯定适用啦。

4m也不是小啦 ^_^

ps:如果有需要从自己项目解压unix平台下的.Z文件的话,可以研究一下7Z这个项目,它提供了一个动态库,但偶始终没有找到文档,最后无奈下直接调用项目提供的7za.exe命令行工具进行解压的了。压缩.Z就不用想用这个了,以后不知道支持不。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将.jar文件转化为.pas文件是一种将Java代码转换为Pascal代码的过程。由于两种语言的语法和结构差异较大,这个转换过程需要进行人工操作并可能涉及到一些推测和修改。 要将.jar文件转换为.pas文件,可以按照以下步骤进行: 1. 确定需求:首先需要明确转换的目的,了解.jar文件中所包含的Java代码的功能和目标。这有助于在转换时更好地理解和实现功能。 2. 解压.jar文件:使用压缩软件(如WinRAR或7-Zip)将.jar文件压缩,得到其中的.class文件。.class文件是Java编译生成的二进制字节码文件。 3. 分析和理解.class文件:为了将Java代码转换为Pascal代码,首先需要对.class文件进行分析和了解。这可能需要使用Java反编译工具(如JD-GUI或Fernflower)来将.class文件反编译为可读的Java源代码。 4. 编写Pascal代码:根据对Java代码的理解,使用Pascal编程语言进行重写。这可能需要对Java代码进行一些调整和修改,以适应Pascal语法和结构。 5. 转换工具:有时,可以使用一些自动化工具来辅助将Java代码转换为Pascal代码。这些工具可以根据预定义的规则和模式自动进行转换。但是,由于两种语言的差异较大,这些工具可能无法完成100%的转换,仍然需要人工干预和修改。 6. 调试和测试:在完成Pascal代码转换后,需要进行调试和测试,以确保转换后的代码与原始Java代码实现相同的功能。这可能涉及到运行一些测试用例,并对代码进行逐行比对和功能测试。 最后需要指出的是,将.jar文件转换为.pas文件是一项复杂的任务,并且可能会涉及到很多细节和挑战。根据具体情况和要求,转换的质量和准确性可能会有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值