PHP gzip 压缩后和 java deflate 数据不一致的问题?

Python017

PHP gzip 压缩后和 java deflate 数据不一致的问题?,第1张

gzinflate 是解压 gzdeflate 数据的啊,现在是想压缩后和 java deflate 压缩的数据一致。又看了下资料,java Deflater(int level,boolean nowrap) 压缩,如果参数 'nowrap' 为 true,则不使用 ZLIB 头和校验和字段,默认好像是 false。而采用 PHP gzencode ($data , -1, FORCE_DEFLATE ) 进行压缩,只是带了zlib headers 信息,没有带 crc32 checksum,可能问题就在这儿,但是还不知道怎么解决,还请好心的版主给点建议!

HTML应用变得越来越强大,有时会在浏览器中处理比较大的数据,并传回服务器,简单的get/post提交数据会变得比较慢,影响用户体验。如果对上传到数据先压缩一下再上传就可以节省上传时间。github上有一个JSZIP项目用JS实现了zip的常用的功能。jszip是基于文件结构的deflate压缩,下面来看一下代码。

上传大数据,采用Jszip默认压缩出的BASE64字符串,经过URL Encode处理后,提交到服务器。

private String zip = null

//Jszip

public void zipUpload(){

if (zip == null) {

System.out.println("zip is null")

return

}

try {

byte[] data = javax.xml.bind.DatatypeConverter.parseBase64Binary(zip)

InputStream is = new ZipTool().readFile(new ByteArrayInputStream(data), "data.txt")

LineReader lr = new LineReader(new InputStreamReader(is))

String line = lr.readLine()

while (line != null) {

System.out.println(line)

line = lr.readLine()

}

} catch (UnsupportedEncodingException e) {

e.printStackTrace()

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

}

ZipTool中的readFile方法的内容:

public InputStream readFile(InputStream zipFile, String filename) throws IOException {

ZipInputStream zis = new ZipInputStream(zipFile)

ZipEntry entry = zis.getNextEntry()

while (entry != null &&(entry.isDirectory() || !entry.getName().equalsIgnoreCase(filename))) {

entry = zis.getNextEntry()

}

if (entry == null) {

return null

}

return zis

}