如何用java读取php的gzencode函数输出的压缩字符

问题描述

如何用java读取php的gzencode函数输出的压缩字符

输入的字符串为php的gzencode压缩的字符串,可以用gzdecode解开,但是用java的java.util.zip.GZIPInputStream读入字符串时,总是提示:
java.util.zip.ZipException: Not in GZIP format
希望有经验的朋友帮我解答一下,我的代码如下:

 JAVA
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class Gzdecode {
    public static void decompress(InputStream is, OutputStream os)
            throws Exception {
        GZIPInputStream gis = new GZIPInputStream(is);
        int count;
        byte data[] = new byte[BUFFER];
        while ((count = gis.read(data, 0, BUFFER)) != -1) {
            os.write(data, 0, count);
        }
        gis.close();
    }
    public static byte[] decompress(byte[] data) throws Exception {
        ByteArrayInputStream bais = new ByteArrayInputStream(data);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        // 解压缩
        decompress(bais, baos);
        data = baos.toByteArray();
        baos.flush();
        baos.close();
        bais.close();
        return data;
    }
        public static void main(String[] args) throws Exception
    {
        String input="";
        byte[] data=input.getBytes("UTF-8");
        byte[] data_decompress=decompress(data);
        System.out.write(data_decompress);

解决方案

我不是很清楚php的gzencode的原理,不过java的GZIPInputStream会检查头部是否两个字节0x8b1f(魔数)。如果不是,就会抛这个错, 还有你的程序有个明显的错误

byte[] data=input.getBytes("UTF-8"); //这里并不是把你输入的8B1F转成2个bytes的数组,而是转成四个byte对应的56,66,49,70
//,你需要的是一个装换字符成byte的类,提醒一下apache common codec有这个API
// http://commons.apache.org/proper/commons-codec/download_codec.cgi
//你也可以自己写一个

时间: 2024-10-30 10:06:02

如何用java读取php的gzencode函数输出的压缩字符的相关文章

新手 请求帮忙解答-请问下,如何用Java读取 一个txt文件(txt文件是一个数字矩阵)``````

问题描述 请问下,如何用Java读取 一个txt文件(txt文件是一个数字矩阵)`````` 请问下,如何用Java读取 一个txt文件(txt文件是一个数字矩阵).把每列的数据合成一大列输出,意思就是把第二列的数据放在第一列的末尾,第三列放在第二列的末尾````` 多谢了. 解决方案 太麻烦 说下思路,你看一下行不行, 1>.把每一行都放到一个数组里 ,可以用缓冲流读取一行, 2>.然后按矩阵的分割部分的字符 来分割这一行的字符串 拿到每个数组项, 3>.根据每个数组的下标,可以拿到

编码-如何用java读取含有逻辑判断的xml文件?

问题描述 如何用java读取含有逻辑判断的xml文件? 各位大神好, 我现在想要用Java读取一个XML文件,内容如下.想实现给出relativeHumidity一个值,它可以通过读取XML自己判断是否在范围内.不如改如何实现呢?还是说xml只能机械表示内容,不能用作逻辑判断? <?xml version="1.0" encoding="UTF-8"?> 解决方案 Java读取xml文件JAVA读取XML文件java读取xml文件 解决方案二: 文件内容

JAVA 读取Excel中部分加删除线的字符

问题描述 请教,在读取Excel的文档时,已经取出Cell的内容,但该Cell中放的字符串只有部分有删除线.问题是如何取出没有加删除线胡字符?例如:Cell中放入R1,R2,R3,R4,R5,R6,R7,其中R6,R7加了删除线,现在如何把没有加删除线的R1,R2,R3,R4,R5取出. 解决方案 解决方案二:获取r1cell获取r1cellStyler1CellStyle判断r1CellStyle是否有下划线,有就输出解决方案三:用cellStyle来判断解决方案四:測試過,如果cell中的字

如何用java实现一个类的主题输出

问题描述 请问大侠们,以下的问题要如何去解决:我有一个类Event如下publicclassEvent{publicEvent(Stringsubject,DatestartDate){.....}.....}要求Event要提前15分钟输出subject给用户.目前我的做法如下:publicclassEventimplementsRunnable{publicEvent(Stringsubject,CalendarstartDate){setSubject(subject);setStartD

jdbc-如何用Java根据存在于sqlserver2000中的图片路径把图片读取出来

问题描述 如何用Java根据存在于sqlserver2000中的图片路径把图片读取出来 把图片都放在一个文件夹里,用sqlserver2000存图片路径,路径该怎么写?如何用Java jdbc桥接方式把图片读取出来?希望高手指导 解决方案 首先我们在sqlserver是有<图片>这个字段用于存贮图片信息的,那我们就解析并输出图片,java读取sqlserver <图片>字段图片并输出你的图片文件夹要在项目下,数据库中写成绝对路径 public class GetPhoto { /*

java javascript-如何用java去读取FTP下的文件目录,可以手动选择文件上传路径

问题描述 如何用java去读取FTP下的文件目录,可以手动选择文件上传路径 如何用JAVA实现在本地浏览器点击添加按钮,跳转到FTP服务器的目录下,可以浏览FTP目录,选择需要的文件,然后把路径+文件名添加到input中,后台或js怎么实现?

如何用Java编写读取txt文件中数据并播放出来的软件,该怎么弄???

问题描述 如何用Java编写读取txt文件中数据并播放出来的软件,该怎么弄?? 解决方案 解决方案二:播放出来?不懂解决方案三:javax.sound.midi结合java.io自己找文档看看

java读取操作系统环境变量

变量 java读取操作系统环境变量 /**文件名:SysProb.java描述: 取得当前系统变量的程序. java中的System.getProperty只是针对JVM来的,如果要取得系统环境变量,还要用到系统相关的函数作者: 慈勤强Email :cqq1978@Gmail.com**/ import java.util.*;import java.io.*; class SysProb{ //返回当前系统变量的函数,结果放在一个Properties里边,这里只针对win2k以上的,其它系统可

图像处理-如何用Java 的ImageIO获取8位灰度图像的像素值

问题描述 如何用Java 的ImageIO获取8位灰度图像的像素值 用getRGB方法获得的不准确 最好能给个不同位数的读取方法,多谢其他方法也可以. 解决方案 想问一下,这个问题你解决了吗,怎么解决的?