邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

php还原java中gzip压缩方法
有个需求,要把java代码里面的jzip压缩方法还原成php
java jzip压缩代码如下


 /*** 
     * 压缩GZip 
     *  
     * @param data 
     * @return 
     */  
    public static byte[] gZip(byte[] data) {  
        byte[] b = null;  
        try {  
            ByteArrayOutputStream bos = new ByteArrayOutputStream();  
            GZIPOutputStream gzip = new GZIPOutputStream(bos);  
            gzip.write(data);  
            gzip.finish();  
            gzip.close();  
            b = bos.toByteArray();  
            bos.close();  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
        return b;  
    }  



    php代码

     
class {

   /*
     * 把字符串进行gzip压缩,并转换成byte数组
     * @param $str 需要进行压缩的字符串
     * @param $bytes 目标byte数组
     */

   public static function myGzencode($str){

       $res = gzencode($str);
       $res = self::getBytes($res);
       $res[9] = 0; //这步完全是为了和java压缩后的头部保持一致,也许是个坑
       return $res;
   }

   /*
    * 转换一个String字符串为byte数组
    * @param $str 需要转换的字符串
    * @param $bytes 目标byte数组
    * @author Zikie
    */

   public static function getBytes($str) {

       $len = strlen($str);
       $bytes = array();
       for($i=0;$i<$len;$i++) {
           if(ord($str[$i]) >= 128){
               $byte = ord($str[$i]) - 256;
           }else{
               $byte = ord($str[$i]);
           }
           $bytes[] =  $byte ;
       }
       return $bytes;
   }  
    }
ps:https://tools.ietf.org/html/rfc1952#section-2.2

    同学给推荐了这边文章,如下内容 
0 - FAT filesystem (MS-DOS, OS/2, NT/Win32)
         1 - Amiga
         2 - VMS (or OpenVMS)
         3 - Unix
         4 - VM/CMS
         5 - Atari TOS
         6 - HPFS filesystem (OS/2, NT)
         7 - Macintosh
         8 - Z-System
         9 - CP/M
        10 - TOPS-20
        11 - NTFS filesystem (NT)
        12 - QDOS
        13 - Acorn RISCOS
       255 - unknown

    我压缩后转换成byte数组,第九位是11,java那边是0,可能我的文件系统是NTFS filesystem (NT),java可能是FAT filesystem (MS-DOS, OS/2, NT/Win32)



优惠券
最新微语