python和java之间的Gzip压缩和解压缩

时间:2016-08-09 15:24:08

标签: java base64 gzip compression

我想在java中解压缩一个字符串,它在gthon中被压缩并编码为base64。

我想要做的是在python中对字符串执行gzip压缩,我必须在java中解压缩该压缩字符串。

首先gzip在python中使用gzip模块压缩字符串' hello' +' \ r \ n' +' world' 然后在python中将该压缩字符串编码为base64。我得到的输出是 H4sIAM7yqVcC / 8tIzcnJ5 + Uqzy / KSQEAQmZWMAwAAAA =

然后我使用java中python的编码压缩字符串来gzip解压缩该字符串。为此,我使用 DatatypeConverter.parseBase64Binary 对java中的字符串执行base64解码,这将给出一个字节数组,然后使用 GZIPInputStream 对该字节数组执行gzip解压缩。但是java中的解压缩输出显示为 helloworld

我在python的压缩字符串中有一个' \ r \ n' 但它没有在解压缩输出中显示。我认为这里的问题是在该字符串上执行base64编码和解码。请帮我解决这个问题。

使用的字符串:

string ='你好' +' \ r \ n' +'世界'

java中的预期输出:

您好
世界

输出得到:

的HelloWorld

这是python中的gzip压缩代码:

字符串='你好' +' \ r \ n' +'世界'

out = StringIO.StringIO()

使用gzip.GzipFile(fileobj = out,mode =" w")作为f:

    f.write(o)

F =开放(' compressed_string'' WB&#39)

out.getvalue()

f.write(base64.b64encode(out.getvalue()))

f.close()

这是java中的gzip解压缩代码:

BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(" compressed_string")));

试 {

while((nextLine=reader.readLine())!=null)

{

    compressedStr +=nextLine;                                    

}

finally
{

  reader.close();
}

}

byte [] compressed = DatatypeConverter.parseBase64Binary(compressedStr);

decomp = decompress(压缩);

这是java中的gzip解压缩方法:

public static String decompress(压缩的最终byte [])抛出IOException {

    String outStr = "";

    if ((compressed == null) || (compressed.length == 0)) {

        return "";

    }

    if (isCompressed(compressed)) {

        GZIPInputStream gis = new GZIPInputStream(new 

ByteArrayInputStream进行(压缩));

        BufferedReader bufferedReader = new BufferedReader(new 

InputStreamReader(gis," UTF-8"));

        String line;

        while ((line = bufferedReader.readLine()) != null) {

            outStr += line;

        }

    } else {

        outStr = new String(compressed);

    }

    return outStr;

}

1 个答案:

答案 0 :(得分:1)

  

读取一行文字。一条线被认为是换行(' \ n'),回车(' \ r')或回车后紧接着换行符中的任何一条终止

     

返回:

     
    

包含该行内容的String,不包括     任何行终止字符,如果流的末尾有,则返回null     已达成

  

bufferedReader.readLine()逐行读取

所以你需要添加' \ r \ n'当你追加字符串

outStr += line + "\r\n";

但您应该使用StringBuilder