我想在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;
}
答案 0 :(得分:1)
读取一行文字。一条线被认为是换行(' \ n'),回车(' \ r')或回车后紧接着换行符中的任何一条终止
返回:
包含该行内容的String,不包括 任何行终止字符,如果流的末尾有,则返回null 已达成
所以你需要添加' \ r \ n'当你追加字符串
outStr += line + "\r\n";
但您应该使用StringBuilder