有个需求,要把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)
已有 0 条评论